как объединить файлы на основе шаблона имени - PullRequest
0 голосов
/ 10 октября 2018
/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 на основе шаблона имени ........... может кто-нибудь помочь ... заранее спасибо

Ответы [ 2 ]

0 голосов
/ 10 октября 2018
find ./myfiles -type f -regex '.*/.*\.tar\.gz\.part-.*' |
sed 's/\.part-.*$//' | 
sort -u |
xargs -n1 -d'\n' -- \
sh -c 'cat "$1".part-* > "$1"' --

получить все файлы из папки myfiles с именем *.tar.gz.part-*.Я удаляю последние .part-* из имен файлов и получаю только уникальные имена из списка.Затем для каждой строки я запускаю cat $line.part-* > $line с использованием xargs.

Live версия доступна на tutorialspoint .

0 голосов
/ 10 октября 2018
#!/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
...