Como faço recursivamente criar um diretório Textures em todos os diretórios existentes no Bash e excluí-los?

4

Digamos que eu tenha a seguinte estrutura:

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

Use isso para criar a estrutura de teste:

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

Eu gostaria de criar uma pasta Texture em todos os diretórios para incluir o local atual para que ficasse assim (Todos os novos diretórios Texture estão marcados com * ):

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

Então, eu também seria capaz de excluir essas mesmas pastas depois de trabalhar com elas. Você pode assumir que não existem outros diretórios com o nome Textures que precisem ser salvos.

Portanto, gostaria de criar um diretório Textures no diretório atual e em todos os seus subdiretórios. E gostaria de poder excluir todos os diretórios chamados Textures quando eu terminar de mover os arquivos.

    
por kingcobra1986 02.10.2017 / 21:53

1 resposta

4

Você pode usar um loop ...

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

Remova echo após o teste para criar os diretórios.

Você pode desativar globstar com shopt -u globstar , mas está desativado por padrão e estará desativado quando você iniciar um novo shell.

Faça suas coisas ...

Em seguida, para remover os diretórios, primeiro find deles

find -type d -name "Textures"

Então, se a saída parece OK, adicione -delete

find -type d -name "Textures" -delete
    
por Zanna 02.10.2017 / 22:11