如何根据名称模式合并文件
how to merge files based on the name pattern
/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
所有这些文件都存储在一个目录中。我想根据其名称模式合并这些文件,如 sandboxserver_local.tar.gz、sandboxserver_shared.tar.gz、sandboxserver_admin.tar.gz、prodserver_local.tar.gz、prodserver_shared.tar.gz、prodserver_admin.tar.gz... ..........有人可以帮忙......提前致谢
#!/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 "".part-* > ""' --
从名为 *.tar.gz.part-*
的 myfiles
文件夹中获取所有文件。我从文件名中删除最后一个 .part-*
并从列表中仅获取唯一的文件名。然后对于每一行我 运行 cat $line.part-* > $line
使用 xargs.
在线版本可在 tutorialspoint 获得。
/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
所有这些文件都存储在一个目录中。我想根据其名称模式合并这些文件,如 sandboxserver_local.tar.gz、sandboxserver_shared.tar.gz、sandboxserver_admin.tar.gz、prodserver_local.tar.gz、prodserver_shared.tar.gz、prodserver_admin.tar.gz... ..........有人可以帮忙......提前致谢
#!/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 "".part-* > ""' --
从名为 *.tar.gz.part-*
的 myfiles
文件夹中获取所有文件。我从文件名中删除最后一个 .part-*
并从列表中仅获取唯一的文件名。然后对于每一行我 运行 cat $line.part-* > $line
使用 xargs.
在线版本可在 tutorialspoint 获得。