Criando arquivos separados para um conjunto de arquivos

1

Eu tenho diretório contendo uma lista grande de arquivos. Eu gostaria de gzipar cada arquivo de uma determinada máscara para um arquivo separado. Como faço isso automaticamente?

Por exemplo, aqui está o conteúdo do diretório de amostra: - index.html - start.html - myfile1.txt - myfile2.txt - myfile3.txt

Como posso criar um arquivo separado (myfile1.tar.gz, myfile2.tar.gz ...) para cada arquivo que começa com 'myfile *'?

    
por user1184899 16.02.2012 / 11:57

2 respostas

0

se você usar o bash, pode parecer com isso

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

você simplesmente altera o "abc_" para o seu nome de arquivo inicial.

Cuidado, ele irá compactar os arquivos já compactados, porque eles começam como os arquivos normais.

Atenciosamente Kenny

    
por 16.02.2012 / 12:23
1

Eu suponho que você esteja trabalhando em uma caixa linux com o GNU coreutils. Na bash fazer algo como

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

Para entender a linha de comando acima, procure as opções em man find e man xargs . Não há necessidade de tar arquivos únicos, eu acho. Se, por algum motivo misterioso, você realmente precisar da maneira que você escreveu acima, use algo como

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

Procure as explicações em man bash . Felicidades!

PS: Para filtrar arquivos já compactados, use uma pré-condição [ "${file##*.}" == "gz" ] || antes da proteção contra gravação.

    
por 16.02.2012 / 12:26