find $filedir -name .snapshot -prune -o -name \*.gz -mmin +10 -print
deve fazê-lo.
Eu escrevi um script rsync que usa o comando find
para encontrar todos os arquivos com mais de 10 minutos e copia-os para um servidor remoto.
A parte relevante do código é:
print_log "------ Starting $0 -------"
find $filedir -name \*.gz -mmin +10 >> $varfile
for line in $(awk -F"/" '{print $4}' $varfile); do
rsync -raPv --ignore-existing --remove-source-files --chmod=u+rwx $filedir/$line rsync://[email protected]/hpfiles/ --password-file /etc/rsync.passwd
done
O problema que tenho está relacionado ao comando find, quando eu executo o script, recebo a seguinte resposta enquanto ela fica parada e não continuo:
[appadmin@srv01 ~]$ /nfs/hadooper/rsync_hpfiles-lock.sh >> /var/log/rsync_hpfiles.log
find: File system loop detected; '/mass1/hpfiles_staging/.snapshot' is part of the same file system loop as '/mass1/hpfiles_staging'.
find: File system loop detected; '/mass1/hpfiles_staging/.snapshot' is part of the same file system loop as '/mass1/hpfiles_staging'.
^C^Z
Eu tentei as seguintes coisas, mas sem sucesso:
find $filedir -name \*.gz -a ! -name ".snapshot" -mmin +10 >> $varfile
find $filedir -name \*.gz -a ! -type d -name ".snapshot" -mmin +10 >> $varfile
find $filedir -name -a ! -path "*/.snapshot/*" \*.gz -mmin +10 >> $varfile
Como meu comando deve procurar para poder excluir o diretório .snapshot
da saída do comando find?