Find
遞歸刪除solaris中除特定文件之外的所有文件+文件夾
以下命令遞歸刪除文件夾
104.tar
下的所有/tmp/CURRENT
文件。find /tmp/CURRENT/ -type f ! -name '104.tar' -exec rm -rf {} +
但是,它不會遞歸刪除
/tmp/CURRENT
.如果我給
-type d
它可能會有所幫助,但我不想要單獨的命令。我的要求是使用我在下面嘗試的相同命令刪除文件和文件夾,但沒有幫助。find /tmp/CURRENT/ -type f -type d ! -name '104.tar' -exec rm -rf {} +
如果我根本不指定
-type
選項,那麼該命令會刪除整個/tmp/CURRENT
文件夾而不是其內容!注意:我的作業系統是 Sun Solaris Sparc。
你能建議嗎?
當您使用時,
-type f
您告訴find
您只考慮文件而不考慮其他任何內容。所以這不會刪除目錄是正常的。為避免/tmp/CURRENT/
自行刪除,您可以嘗試以下操作:
- 如果你的
find
支持-mindepth
(GNUfind
——Linux 系統上的預設設置——有這個,我不知道其他find
版本可能支持它),你可以告訴它只看至少一層以下的東西:find /tmp/CURRENT/ ! -name '104.tar' -mindepth 1
- 使用第二個
!
運算符將其排除:find /tmp/CURRENT/ ! -path /tmp/CURRENT/ ! -name '104.tar'
- 只需使用
-path
, 並查找以至少一個字元開頭/tmp/CURRENT
併後跟至少一個字元的路徑:find /tmp/CURRENT/ -path '/tmp/CURRENT/?*' ! -name '104.tar'
在所有三種情況下,您都可以
-exec rm -r {} +
在命令末尾添加以刪除匹配項。但是,請注意,這些命令將刪除除特定文件之外的所有內容
/tmp/CURRENT/104.tar
。因此,如果您有或在子目錄中/tmp/CURRENT/dir1/104.tar
命名的任何其他文件,這些文件將被刪除。104.tar
如果這不是您想要的,請編輯您的問題以澄清。當然,如果您只想刪除
/tmp/CURRENT
except中的所有內容/tmp/CURRENT/104.tar
,則根本不需要find
。你可以在 bash 中執行它:shopt -s extglob rm -r /tmp/CURRENT/!(104.tar)