Shell-Script
刪除所有其他未定義的目錄
我需要創建一個清除腳本以從特定目錄列表中刪除任何外部目錄。
我的想法是做這樣的事情:
#!/bin/ksh find /data/${USER}/SAS/ -type d ! -name 'SE' | find /data/${USER}/SAS/ -type d ! -name 'Rejet' | find /data/${USER}/SAS/ -type d ! -name 'Acq' | find /data/${USER}/SAS/ -type d ! -name 'Archiv' | find /data/${USER}/SAS/ -type d ! -name 'Cloture' | find /data/${USER}/SAS/ -type d ! -name 'Emis' | find /data/${USER}/SAS/ -type d ! -name 'Ident' | find /data/${USER}/SAS/ -type d ! -name 'Irr*' | find /data/${USER}/SAS/ -type d ! -name 'Recep*'
然後
-type f -exec rm {} \;
但真的不知道該怎麼做。
要刪除路徑中的所有文件夾,
/data/${USER}/SAS/
但預定義/指定列表中的文件夾除外 - 使用以下優化find
方法:find /data/${USER}/SAS/ -type d -regextype posix-egrep \ ! -regex ".*/(SE|Rejet|Acq|Archiv|Cloture|Emis|Ident|Irr.*|Recep.*)" \ ! -name "SAS" -exec rm -rf {} \;
由於您使用的是
ksh
,它應該只是一個問題:(FIGNORE='@(.|..)'; cd /data/"$USER"/SAS/ && echo rm -rf -- !(SE|Rejet|Acq|Archiv|Cloture|Emis|Ident|Irr*|Recep*)/)
echo
(高興時刪除)這將刪除除與該列表匹配的目錄之外的所有目錄(僅保留非目錄文件)。
FIGNORE
如果您不想刪除隱藏目錄,請刪除該部分。請注意,它還將考慮到目錄的符號連結(並根據
rm
實現刪除符號連結或目標的內容)。使用
find
,您可以:cd /data/"$USER"/SAS && find . ! -name . -prune \ ! -name SE \ ! -name Reject \ ! -name Acq \ ! -name Archiv \ ! -name Cloture \ ! -name Emis \ ! -name Ident \ ! -name 'Irr*' \ ! -name 'Recep*' -type d -exec echo rm -rf {} +