Назад | Перейти на главную страницу

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

Как мне сжать каждый файл в каталоге в его собственный 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