Это мое не элегантное решение. Это будет go в каталог (in_dir), а затем искать в этом каталоге любые каталоги, которые содержат файлы .IMA. Каждая папка, содержащая IMA, будет заархивирована. Весь каталог верхнего уровня отправляется в $ out_dir, за исключением папок, которые содержат файлы .IMA (с использованием флага --exclude tar). Затем архивные папки удаляются для экономии места.
#!/bin/bash
in_dir=~/test_in_dir
out_dir=~/test_out_dir
Найдите все папки, в которых есть файлы IMA
find ${in_dir} -name '*.IMA' -printf '%h\n' | sort -u
L oop, по каталогам и превратите их в массив
cd $in_dir
i=0
shopt -s dotglob
shopt -s nullglob
array=(`find . -name '*.IMA' -printf '%h\n' | sort -u`)
for dir in "${array[@]}" ; do
echo "$dir"
(( i++))
done
L oop через массив $ i количество раз и tar каждой папки, как вы это делаете.
j=0
while ((j < $i)) ; do
cd $in_dir
cd ${array[$j]}
folder=${PWD##*/}
cd ../
tar cfz ${folder}.tar.gz ${folder}/*
(( j++ ))
done
Отправка всего каталога в out_dir, но исключая все каталоги в массиве
exclude_options=()
for x in "${array[@]}"; do
exclude_options+=(--exclude="$x")
done
cd $in_dir
tar -czvf $out_dir/transferred_from_in.tar.gz "${exclude_options[@]}" ./
rm все файлы tar в in_dir для экономии места
for y in "${array[@]}"; do
rm -r ${y}.tar.gz
done