Как мне сжать каждый файл в каталоге в его собственный tar, сохранив имя для каждого файла?
то есть file1.out file2.out
->
file1.out.tar.gz file2.out.tar.gz
Помещение каждого файла в отдельный tar-файл не имеет смысла в этом сценарии. Ты можешь использовать gzip
чтобы сжать их напрямую:
gzip *
приведет к file1.out.gz
, file2.out.gz
и т.п.
Вы бы использовали tar
только если вам нужен сжатый архив как один файл.
Если вам нужен tar-архив для каждого файла, вы можете создать его так:
for i in *; do tar -czf $i.tar.gz $i; done
Чтобы использовать ответ @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
Попробуй это:
#!/bin/bash
for fich in *; do
if [ "$fich" != "*" ] ; then
gzip -9 -c $fich > $fich.tar.gz
\mv $fich.tar.gz $fich
fi
done