Eu quero arquivar minhas fotos em arquivos tar.
O diretório que contém fotos tem um diretório por ano e vários diretórios dentro de cada diretório do ano:
Photos
2005
2006
Some dir with spaces
Pic1.jpg
Pic2.jpg
...
Other dir here
...
2007
...
A estrutura de destino também deve conter um diretório por ano, mas dentro de um diretório do ano eu teria arquivos tar.gz para cada subdir do diretório de origem, assim:
Backup
2005
2006
Some_dir_with_spaces.tar.gz
Other_dir_here.tar.gz
...
2007
...
O script que estou criando para fazer isso é o seguinte:
cd ~/Photos
for y in *
do
YEAR_DIR=~/Backup/$y
mkdir -p $YEAR_DIR
pushd $y
for d in *
do
f='echo $d | tr ' ' '_' | tr -d ',.!'' # Clean the name
t=$YEAR_DIR/$f.tar.gz
d=$(printf '%q' "$d")
# echo tar czf $t "$d" # This outputs the command as expected
tar czf $t "$d" # but executing it results in error: Cannot stat: No such file or directory
done
popd
done
Como sugerido no comentário, echoing o comando preparado parece bem, e também se eu copiar essa declaração e executá-lo do terminal funciona, mas executá-lo dentro do script ( tar czf $t "$d"
) resulta em um erro:
tar: Some\ dir\ with\ spaces: Cannot stat: No such file or directory
O que estou fazendo de errado?
P.S. Eu estou fazendo isso em um Mac.