Bash

Linux 查找:如何從查找結果中排除“.snapshot”目錄?

  • August 2, 2020

我編寫了一個 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://appuser@10.11.X.X/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 命令輸出中排除目錄,我的命令應該看起來如何?

find $filedir -name .snapshot -prune -o -name \*.gz -mmin +10 -print應該這樣做。

修剪名稱.snapshot有效,但我更喜歡修剪路徑/.snapshot

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

引用自:https://serverfault.com/questions/723694