Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何基于名称模式合并文件_Bash_Shell_Unix_Cat - Fatal编程技术网

Bash 如何基于名称模式合并文件

Bash 如何基于名称模式合并文件,bash,shell,unix,cat,Bash,Shell,Unix,Cat,所有这些文件都存储在一个目录中。我想根据名称模式合并这些文件,如sandboxserver_local.tar.gz、sandboxserver_shared.tar.gz、sandboxserver_admin.tar.gz、prodserver_local.tar.gz、prodserver_shared.tar.gz、prodserver_admin.tar.gz。。。。。。。。。。。有人能帮忙吗。。。提前谢谢 /myfiles/sandboxserver_local.tar.gz.par

所有这些文件都存储在一个目录中。我想根据名称模式合并这些文件,如sandboxserver_local.tar.gz、sandboxserver_shared.tar.gz、sandboxserver_admin.tar.gz、prodserver_local.tar.gz、prodserver_shared.tar.gz、prodserver_admin.tar.gz。。。。。。。。。。。有人能帮忙吗。。。提前谢谢

/myfiles/sandboxserver_local.tar.gz.part-aa
/myfiles/sandboxserver_local.tar.gz.part-ab
/myfiles/sandboxserver_local.tar.gz.part-ac

/myfiles/sandboxserver_shared.tar.gz.part-aa
/myfiles/sandboxserver_shared.tar.gz.part-ab
/myfiles/sandboxserver_shared.tar.gz.part-ac

/myfiles/sandboxserver_admin.tar.gz.part-aa
/myfiles/sandboxserver_admin.tar.gz.part-ab
/myfiles/sandboxserver_admin.tar.gz.part-ac

/myfiles/prodserver_local.tar.gz.part-aa
/myfiles/prodserver_local.tar.gz.part-ab
/myfiles/prodserver_local.tar.gz.part-ac

/myfiles/prodserver_shared.tar.gz.part-aa
/myfiles/prodserver_shared.tar.gz.part-ab
/myfiles/prodserver_shared.tar.gz.part-ac

/myfiles/prodserver_admin.tar.gz.part-aa
/myfiles/prodserver_admin.tar.gz.part-ab
/myfiles/prodserver_admin.tar.gz.part-ac
从名为like
*.tar.gz.part-*
myfiles
文件夹中获取所有文件。我从文件名中删除最后一个
.part-*
,并从列表中仅获取唯一的文件名。然后,对于每一行,我使用xargs运行
cat$line.part-*>$line

现场版本可在以下网址获得:

#!/usr/bin/env bash

# loop over all files
for file in /myfiles/*.tar.gz.part*; do
   # remove last characters (".part-xx")
   # this creates filename.tar.gz
   tarball="${files%.part-[a-z][a-z]}"
   # if the tarball exists, move to the next
   [[ -f "${tarball}" ]] && continue
   # concatenate tar files
   cat ${tarball}.part-[a-z][a-z] > "${tarball}"
done
find ./myfiles -type f -regex '.*/.*\.tar\.gz\.part-.*' |
sed 's/\.part-.*$//' | 
sort -u |
xargs -n1 -d'\n' -- \
sh -c 'cat "$1".part-* > "$1"' --