Как мне сжать каждый файл в каталоге в свой собственный 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
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 (который будет работать только в текущем каталоге), если у вас ОГРОМНОЕ количество файлов или вы хотите сделать это в рекурсивной структуре каталогов, вы также можете использовать
и если вам нужно поместить вывод в другой каталог (в этом примере
../target
) и не хотите удалять оригиналы, вы можете сделать что-то вроде:источник
find . -type f -exec gzip {} \;
будет достаточно. Второй код потерпит неудачу с именами файлов, содержащими пробелы и тому подобное.{}
как привычка). Однако другие уже опубликовали их в качестве ответов на ваш вопрос.find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;
Попробуй это:
источник