Linux 查找:如何从查找结果中排除“.snapshot”目录?

Linux 查找:如何从查找结果中排除“.snapshot”目录?

我编写了一个 rsync 脚本,它使用find命令查找所有超过 10 分钟的文件并将它们复制到远程服务器。

代码的相关部分是:

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

我遇到的问题与 find 命令有关,运行脚本时我收到以下响应,但脚本挂在那里并且无法继续:

[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

我尝试过以下方法但无济于事:

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

为了能够.snapshot从 find 命令输出中排除目录,我的命令应该看起来怎么样?

答案1

find $filedir -name .snapshot -prune -o -name \*.gz -mmin +10 -print应该这么做。

答案2

修剪名称.snapshot是可行的,但我更喜欢修剪路径/.snapshot

find $filedir -path "/.snapshots" -prune -o -name \*.gz -mmin +10 -print >> $varfile

相关内容