Um script curto, xfun:
#!/bin/bash
b=$(basename "$1" .xmp)
# echo "tar -cjf $b.tar.bz2 $b.xmp $b.nef"
tar -cjf "$b.tar.bz2" -- "$b.xmp" "$b.nef"
Invocação:
find -name "*xmp" -execdir ./xfun {} ";"
Eu tenho um grande arquivo de imagens editadas da minha câmera, cada imagem é na verdade um par de arquivos - * .nef & * .xmp. Eu gostaria de percorrer todas as pastas e, em seguida, compactar esses pares em arquivos tgz únicos.
Cada um dos nomes de arquivos em um diretório é único, então seria suficiente mover os nomes dos arquivos da saída de ls *.nef
para o comando tar -czf {filename}.tgz {filename}.*
, mas não tenho idéia de por onde começar.
Obrigado antecipadamente.
Em zsh ou bash ≥4:
for x in **/*.nef; do
x=${x%.nef}
if [ -e "$x.xmp" ]; then
tar -czf "$x.tgz" -- "$x.nef" "$x.xmp" && rm -- "$x.nef" "$x.xmp"
fi
done
Remova a parte && rm …
se não quiser excluir os arquivos arquivados.
Remova a parte **/
na primeira linha para atuar apenas no diretório atual e não em seus subdiretórios (e, em seguida, o snippet funcionará em qualquer shell).
Algumas implementações tar
antigas podem não suportar -z
para criar um arquivo gzip; então você pode usar tar -cf "$x.tar" -- "$x.nef" "$x.xmp" && gzip -o "$x.tgz" -- "$x.tar" && rm …
. Se você não quiser excluir os arquivos, outra possibilidade é tar -cf - -- "$x.nef" "$x.xmp" | gzip >"$x.tgz"
(este formulário não pode ser combinado com && rm
porque excluiria os arquivos de origem mesmo se o comando tar
falhasse).