1

У меня есть каталог, содержащий большой список файлов. Я хотел бы сжать каждый файл определенной маски в отдельный архив. Как мне сделать это автоматически?

Например, вот пример содержимого каталога:- index.html - start.html - myfile1.txt - myfile2.txt - myfile3.txt

Как мне создать отдельный архив (myfile1.tar.gz, myfile2.tar.gz ...) для каждого файла, начинающегося с 'myfile *'?

2 ответа2

1

Я предполагаю, что вы работаете над Linux-коробкой с GNU coreutils. В Bash сделать что-то вроде

find -name "myfile*" -print0 | xargs -n 1 -0 gzip

Чтобы понять приведенную выше командную строку, посмотрите параметры в командах man find и man xargs . Думаю, нет необходимости записывать отдельные файлы. Если по какой-то таинственной причине вам это действительно нужно так, как вы написали выше, используйте что-то вроде

find -name "myfile*" -print0 | \
while IFS="" read -r -d $'\0' file
do 
  [ -f "${file%.*}.tar.gz" ] || tar czvf "${file%.*}.tar.gz" "${file}"
done

Посмотрите объяснения в man bash . Ура!

PS: чтобы отфильтровать уже сжатые файлы, используйте [ "${file##*.}" == "gz" ] || предварительное условие перед защитой от перезаписи.

0

если вы используете bash, это может выглядеть так

for file in `ls abc_*`; do tar -czvf $file.tar.gz $file ; done

вы просто меняете "abc_" на ваше начальное имя файла.

Будьте осторожны, он сожмет уже сжатые файлы, потому что они запускаются как обычные файлы.

С наилучшими пожеланиями Кенни

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .