-1
/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

All these files are stored in one directory. I want to merge these files like sandboxserver_local.tar.gz, sandboxserver_shared.tar.gz, sandboxserver_admin.tar.gz,prodserver_local.tar.gz, prodserver_shared.tar.gz, prodserver_admin.tar.gz based on its name pattern........... can someone help ... thanks in advance

sporty
  • 51
  • 3

2 Answers2

0
#!/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
kvantour
  • 25,269
  • 4
  • 47
  • 72
0
find ./myfiles -type f -regex '.*/.*\.tar\.gz\.part-.*' |
sed 's/\.part-.*$//' | 
sort -u |
xargs -n1 -d'\n' -- \
sh -c 'cat "$1".part-* > "$1"' --

get all files from myfiles folder named like *.tar.gz.part-*. The I remove the last .part-* from the filenames and get only unique filenames from the list. Then for each line I run cat $line.part-* > $line using xargs.

Live version available at tutorialspoint.

KamilCuk
  • 120,984
  • 8
  • 59
  • 111