定義されていない他のすべてのディレクトリを削除します。

定義されていない他のすべてのディレクトリを削除します。

特定のディレクトリのリストから外部ディレクトリを削除するには、クリーンアップスクリプトを作成する必要があります。

私の考えは、次のようにすることです。

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

関連情報