
特定のディレクトリのリストから外部ディレクトリを削除するには、クリーンアップスクリプトを作成する必要があります。
私の考えは、次のようにすることです。
#!/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 {} \;
本当に何をすべきかわかりません。
答え1
/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 {} \;
答え2
を使用しているので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 {} +