Відповіді:
Поміщення кожного файлу в окремий файл tar не має сенсу в цьому сценарії. Ви можете використовувати gzip
їх для прямого стиснення:
gzip *
приведе file1.out.gz
, і file2.out.gz
т.д.
Ви б використовували tar
лише, якщо вам знадобиться стислий архів як один файл.
Якщо вам потрібен архів tar, для кожного файлу ви можете створити його так:
for i in *; do tar -czf $i.tar.gz $i; done
find . -maxdepth 1 -type d ! -path . | while read a_dir; do tar -zcvf ${a_dir}.tgz ${a_dir} --remove-files; done
find . -maxdepth 1 -mindepth 1 -type d -exec tar -zcvf {}.tgz {} --remove-files \;
Щоб створити відповідь на @ SvenW (яка працюватиме лише в поточному каталозі), якщо у вас є ВЕЛИЧЕЗНА кількість номерів або хочете це зробити в рекурсивній структурі каталогу, ви також можете використовувати
find . -type f -exec gzip \{\} \;
і якщо вам потрібно помістити вихід у інший каталог (у цьому прикладі ../target
) і не хочете видаляти оригінали, ви можете зробити щось на кшталт:
find . -type f -print | while read fname ; do
mkdir -p "../target/`dirname \"$fname\"`"
gzip -c "$fname" > "../target/$fname.gz"
done
find . -type f -exec gzip {} \;
буде достатньо Другий код не може мати імена файлів, що містять пробіли тощо.
{}
як сила звички). Однак інші вже розмістили їх як відповіді на ваше запитання.
find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;