Eu preciso compactar todos os arquivos em um diretório separadamente, incluindo todos os arquivos nos subdiretórios, sem excluir os originais posteriormente. Então, digamos que eu tenho index.html, quero ter no final index.html.gzip AND index.html.
Sou capaz de compactar todos os arquivos em meu diretório via
gzip -r .
Mas também quero manter os arquivos originais.
Isso é possível?
*.*
dentrols
?*.*
corresponde a todos os arquivos nomeados regularmente, e geralmente nenhum diretório. Obviamente, ele só funciona na maioria dos casos e geralmente não se você precisar. Então use ofind
comandols *.*
não seleciona arquivos como TODO .ls
não é necessário em tudo :for x in *
. No entanto, o usofind
deve serfind . -type f | while read -r x
.-r
ativaçãoread
.Você pode alternar facilmente para incluir o que deseja compactar (
-name '*.txt -or -name '*.html
etc.) em vez de agora, excluindo alguns arquivos (arquivos já compactados, de backup e temporários).Também manipula espaços no nome do arquivo.
Mude
gzip
paraecho gzip
para teste. Ou pule a parte -exec todos juntos.Edit: Ah, eu esqueci de mencionar que isso não verifica se
<target>.gz
já existe. Isso pode ou não ser um problema.Edit2: Ok, aqui vamos nós com algo que verifica o arquivo existente. Se isso pode ser desejado. Perdoe o on-line-ness.
My
find
-foo talvez não seja o que poderia ser, pode muito bem ser possível pular diretamente na busca.fonte
Basta adicionar a opção -c, acho que isso deve funcionar
fonte
O gzip 1.6 (junho de 2013) adicionou a
-k, --keep
opção, agora você pode:Encontrado em: /unix/46786/how-to-tell-gzip-to-keep-original-file
fonte
Testado no Debian (gzip 1.3.12-6)
fonte
ls
é desnecessário, use*
.