特定のパターンに一致するサブディレクトリを除くすべてのサブディレクトリを削除する

特定のパターンに一致するサブディレクトリを除くすべてのサブディレクトリを削除する

特定のパターンに一致するディレクトリを除いて、指定されたディレクトリ内のすべてのサブディレクトリとファイルを削除したいと思います。

example_dir/model-*/gen-*/share/**

一般的な設定: それぞれが 1 世代以上である複数のモデル (> 100) を生成しました。これらのモデル (例: example_dir/model-0/gen-0/) 内には、複数のディレクトリとサブディレクトリがあります。

望ましい結果: 一致するものを除くすべてのディレクトリとファイルを削除したい:

example_dir/model-*/gen-*/share/

各モデル/世代内では次のようになります。

rm -rf !(share)

答え1

あなたの質問を完全に理解しているかどうかはわかりませんし、どのようなフォローアップの質問が意味をなすのかもよくわかりません。私が疑問に思っているのは、次のようなディレクトリツリーがある場合です。

example_dir
|-- model-0
|   |-- gen-0
|   |   |-- share
|   |   |-- trash
|   |   |   |-- more_trash
|   |   |-- file123.txt
|   |-- grandfather
|-- platypus
foo

(およびその内容)を削除するだけで十分ですか、それとも、example_dir/model-0/gen-0/trash および も削除しますか ? はどうですか?example_dir/model-0/grandfatherexample_dir/platypusfooexample_dir/model-0/gen-0/file123.txt

trash(およびその内容)とを削除したい場合はfile123.txt

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)

trash(その内容も)削除して保存したい場合はfile123.txt

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)/

(/の後にを追加します!(share))。

いずれにしても、出力を注意深く確認し、それが目的どおりであることが確実な場合は、 なしでコマンドを再度実行します echo

以外のトップレベルディレクトリexample_dir、パターンに一致しない第 1 レベルディレクトリmodel-*、またはパターンに一致しない第 2 レベルディレクトリも削除する場合はgen-*、質問を編集して明確にしてください。

関連情報