Respostas:
Colocar cada arquivo em um arquivo tar separado não faz sentido nesse cenário. Você pode usar gzip
para compactá-los diretamente:
gzip *
resultará em file1.out.gz
, file2.out.gz
etc.
Você usaria tar
apenas se precisasse de um arquivo compactado como um único arquivo.
Se você precisar de um arquivo tar para cada arquivo, você pode criá-lo assim:
for i in *; do tar -czf $i.tar.gz $i; done
find . -maxdepth 1 -type d ! -path . | while read a_dir; do tar -zcvf ${a_dir}.tgz ${a_dir} --remove-files; done
find . -maxdepth 1 -mindepth 1 -type d -exec tar -zcvf {}.tgz {} --remove-files \;
Para desenvolver a resposta do @ SvenW (que funcionará apenas no diretório atual), se você tiver um número ENORME de arquivos ou quiser fazê-lo em uma estrutura de diretórios recursiva, também poderá usar
find . -type f -exec gzip \{\} \;
e se você precisar colocar a saída em um diretório diferente (neste exemplo ../target
) e não quiser remover os originais, faça algo como:
find . -type f -print | while read fname ; do
mkdir -p "../target/`dirname \"$fname\"`"
gzip -c "$fname" > "../target/$fname.gz"
done
find . -type f -exec gzip {} \;
será suficiente. O segundo código falhará com nomes de arquivos que contenham espaços e similares.
{}
por força do hábito). Outros já as publicaram como respostas à sua pergunta, no entanto.
find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;