Сжатие каждого файла в каталоге в собственный сжатый файл

Как сжать каждый файл в каталоге в его собственный tar, сохранив имя для каждого файла?

то есть. file1.out file2.out

- >

file1.out.tar.gz file2.out.tar.gz

20 голосов | спросил DD. 6 FebruaryEurope/MoscowbMon, 06 Feb 2012 00:12:30 +0400000000amMon, 06 Feb 2012 00:12:30 +040012 2012, 00:12:30

3 ответа


53

Включение каждого файла в отдельный файл tar не имеет смысла в этом сценарии. Вы можете использовать gzip, чтобы сжать их напрямую:

gzip *

приведет к file1.out.gz, file2.out.gz и т. д.

Вы использовали бы tar, только если вам нужен сжатый архив в виде одного файла.

Если вам нужен tar-архив для каждого файла, вы можете создать его так:

for i in *; do tar -czf $i.tar.gz $i; done
ответил Sven 6 FebruaryEurope/MoscowbMon, 06 Feb 2012 00:18:30 +0400000000amMon, 06 Feb 2012 00:18:30 +040012 2012, 00:18:30
9

Чтобы построить ответ @ 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
ответил fluffy 6 FebruaryEurope/MoscowbMon, 06 Feb 2012 06:07:59 +0400000000amMon, 06 Feb 2012 06:07:59 +040012 2012, 06:07:59
0

Попробуйте следующее:

#!/bin/bash
for fich in *; do
    if [ "$fich" != "*" ] ; then
        gzip -9 -c $fich > $fich.tar.gz
        \mv $fich.tar.gz $fich
    fi
done
ответил fluffy 6 FebruaryEurope/MoscowbMon, 06 Feb 2012 06:07:59 +0400000000amMon, 06 Feb 2012 06:07:59 +040012 2012, 06:07:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132