Как автоматически создать структуру каталогов в Linux?

#linux #directory #structure

Вопрос:

У меня проблема, у меня есть каталог /home/robert , в котором есть подкаталоги: Dog , Cat , Bird , Horse

Я хочу создать Test и Test1 (автоматически) в каждом из этих каталогов, чтобы получить:

 /home/robert/Dog/Test
/home/robert/Dog/Test1

/home/robert/Cat/Test
/home/robert/Cat/Test1

/home/robert/Bird/Test
/home/robert/Bird/Test1

/home/robert/Horse/Test
/home/robert/Horse/Test1
 

Можно ли это сделать, например, одной командой с регулярными выражениями, или еще лучше в текстовом файле, я ввожу:

 Test
Test1
 

И как-то я беру названия «Тест» и «Тест1» и иду в команду, которая создаст такую структуру каталогов?

Я пытался:

  • mkdir /home/robert/*/Test
  • mkdir /home/robert/{*}/Test
  • mkdir /home/robert/[*]/Test

К сожалению, это не работает

Комментарии:

1. Вы могли бы попробовать что-то вроде find /home/robert/* -type d -maxdepth 0 -print0 | xargs -0 -iDIR mkdir -p DIR/Test DIR/Test1

Ответ №1:

Спасибо! То, что вы написали выше, позвольте мне более точно посмотреть в Интернете. Благодаря этому я написал сценарий, который полностью решает мою проблему. (Вышеуказанные каталоги «Кошка, собака и т. Д. Я привел только в качестве примера), я действительно хотел добиться следующего решения:

     #!/bin/bash
    mkdir -- {1..300}
      for dir in*; do
      mkdir -- "$dir"/{documents,desktop,email};
    done
 

Перед выполнением сценария у меня было:

 $ tree my_office_users/
my_office_users/
└── script
 

И после запуска скрипта у меня есть от 1 до 300 папок, и в каждой из них каталоги: рабочий стол, документы и электронная почта.

И это было все!

 $ tree my_office_users
my_office_users/
├── 1
│   ├── desktop
│   ├── documents
│   └── email
├── 10
│   ├── desktop
│   ├── documents
│   └── email
├── 100
│   ├── desktop
│   ├── documents
│   └── email
├── 101
│   ├── desktop
│   ├── documents
│   └── email
 .
 .
 .
├── 99
│   ├── desktop
│   ├── documents
│   └── email
└── script
 

Ответ №2:

Это соответствует вашим критериям, но я не уверен, что это то, что вы хотели.

 for dir in deleteme/*/;do mkdir -- "$dir"/{Test,Test1}; done
 

где deleteme в вашем случае было бы /home/robert

Если это должна быть только mkdir команда, вы можете это сделать, но она не масштабируется:

 mkdir -p deleteme/{Dog/{Test1,Test2},Cat/{Test1,Test2},Bird/{Test1,Test2},Horse/{Test1,Test2}}