web-dev-qa-db-ja.com

Bashのすべての既存のディレクトリにTexturesディレクトリを再帰的に作成してから削除するにはどうすればよいですか?

私が次の構造を持っているとしましょう:

./
├── Dir1
├── Dir2
│   ├── SubDir1
│   │   └── SubSubDir1
│   └── SubDir2
└── Dir3
    └── SubDir1

これを使用して、テスト構造を作成します。

mkdir -p Dir1 Dir2/SubDir1/SubSubDir1 Dir2/SubDir2 Dir3/SubDir1

すべてのディレクトリにTextureフォルダを作成して、現在の場所を含めると、次のようになります(すべての新しいTextureディレクトリには*):

./
├── Dir1
│   └── Textures*
├── Dir2
│   ├── SubDir1
│   │   ├── SubSubDir1
│   │   │   └── Textures*
│   │   └── Textures*
│   ├── SubDir2
│   │   └── Textures*
│   └── Textures*
├── Dir3
│   ├── SubDir1
│   │   └── Textures*
│   └── Textures*
└── Textures*

そうすれば、これらのフォルダを操作した後で、これらの同じフォルダを削除することもできます。保存する必要があるTexturesという名前のディレクトリは他にないものと想定できます。


したがって、現在のディレクトリとそのすべてのサブディレクトリにTexturesディレクトリを作成したいと思います。そして、ファイルの移動が終わったら、Texturesという名前のすべてのディレクトリを削除できるようにしたいと思います。

4
kingcobra1986

あなたはループを使うことができます...

shopt -s globstar                   # turn on recursive globbing
for d in **/; do                    # for every directory
    echo mkdir -p "$d"Textures      # make a new directory inside named Textures
done

テスト後にechoを削除して、実際にディレクトリを作成します。

globstarshopt -u globstarでオフにできますが、デフォルトではオフになっており、新しいシェルを起動するとオフになります。

あなたのことをしてください...

次に、ディレクトリを削除するには、まずそれらをfind

find -type d -name "Textures"

次に、出力に問題がなければ、-deleteを追加します

find -type d -name "Textures" -delete
4
Zanna