Как я рекурсивно создаю каталог текстур в любом существующем каталоге в Bash, а затем удаляю их?

Предположим, что у меня есть следующая структура:

./ ├── 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
задан 2 October 2017 в 23:11

3 ответа

Вы можете использовать цикл ...

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 после тестирования, чтобы фактически создать каталоги.

Вы можете отключить globstar с помощью shopt -u globstar, но он отключен по умолчанию и будет выключен, если вы запустите новую оболочку.

Сделайте свои вещи ...

Затем, чтобы удалить каталоги, сначала find их

find -type d -name "Textures"

Затем, если вывод выглядит нормально, добавьте -delete

find -type d -name "Textures" -delete
4
ответ дан 22 May 2018 в 17:54
  • 1
    Только на минуту быстрее меня ... Хорошая работа ;-) – Byte Commander 2 October 2017 в 23:13
  • 2
    Не могли бы вы сократить цикл до mkdir -p **/Textures? Я бы испытал это сам, но меня нет дома. – wjandrea 2 October 2017 в 23:19
  • 3
    @wjandrea, который только что создал каталог с именем " ** " с дочерним каталогом текстур. – kingcobra1986 2 October 2017 в 23:20
  • 4
    @ kingcobra1986 Ах, кричит. Я забыл, как работают глобусы. : | – wjandrea 2 October 2017 в 23:21
  • 5
    То, что я попробовал что-то раньше, и пытался рекурсивно создавать каталоги текстур внутри себя, делая его похожим на ./Textures/Textures/Textures/Textures/...., и он продолжал двигаться. – kingcobra1986 2 October 2017 в 23:26

Вы можете использовать цикл ...

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 после тестирования, чтобы фактически создать каталоги.

Вы можете отключить globstar с помощью shopt -u globstar, но он отключен по умолчанию и будет выключен, если вы запустите новую оболочку.

Сделайте свои вещи ...

Затем, чтобы удалить каталоги, сначала find их

find -type d -name "Textures"

Затем, если вывод выглядит нормально, добавьте -delete

find -type d -name "Textures" -delete
4
ответ дан 18 July 2018 в 05:51

Вы можете использовать цикл ...

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 после тестирования, чтобы фактически создать каталоги.

Вы можете отключить globstar с помощью shopt -u globstar, но он отключен по умолчанию и будет выключен, если вы запустите новую оболочку.

Сделайте свои вещи ...

Затем, чтобы удалить каталоги, сначала find их

find -type d -name "Textures"

Затем, если вывод выглядит нормально, добавьте -delete

find -type d -name "Textures" -delete
4
ответ дан 24 July 2018 в 18:27

Другие вопросы по тегам:

Похожие вопросы: