Shell-Script

刪除所有其他未定義的目錄

  • September 15, 2017

我需要創建一個清除腳本以從特定目錄列表中刪除任何外部目錄。

我的想法是做這樣的事情:

#!/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 {} +

引用自:https://unix.stackexchange.com/questions/392169