特定のサブディレクトリを維持しながら、特定のフォルダ内のすべてのサブディレクトリとそのコンテンツを削除する必要があります。 bashまたはシェルスクリプトを使用してこれを行う方法はありますか?ファイル構造は以下の通りです。
container_dir
│
├── delete_this_dir
│ ├── file1.txt
│ └── file2.txt
│
├── delete_this_dir
│ ├── l1.txt
│ └── l2.txt
│
└── keep_this_dir
├── file1.txt
├── file2.txt
└── file3.txt
答え1
バッシュでは、以下を使用してください。外部グローバル変数保持するディレクトリを除外:
shopt -s extglob
rm -rf container_dir/!(keep_this_dir)
答え2
このContainer_ディレクトリをバックアップして、以下を試してください。
find $container_dir/* -path $keep_this_dir -prune -o -name "*" -type d -exec rm -rfv {} \;
ただし、より簡単なバックアップソリューションを使用することをお勧めします。
答え3
名前だけを保持するディレクトリを決定する場合は、次のことができます。
cd container_dir && \
find . -maxdepth 1 -type d ! -name . ! -name keep_this_dir -exec rm -r {} +
つまり、コンテナディレクトリに切り替えてfind
そこから起動しますが、深さレベル1までのみ可能で、そのレベルのディレクトリでのみ検索します。取得されたディレクトリプールでは、find
2つのディレクトリ、つまりContainer_dirとkeep_this_dirのみが保持されます。残りは虐殺されるのを待っています。