Предположим, у меня есть такая структура каталогов:
$ [~ / practice] ls а / б / ц / д /
Теперь я хочу создать каталог tmp1
во всех подкаталогах practice
и я делаю это:
$ [~ / practice] mkdir * / tmp1 mkdir: невозможно создать каталог `* / tmp1 ': такого файла или каталога нет
Затем я пытаюсь -p
переключиться и я в конечном итоге с каталогом с именем *
подкаталогtmp1
$ [~ / practice] mkdir -p * / tmp1 $ [~ / practice] ls * / a / b / c / d /
Я знаю, что использование -p
переключателя для создания нескольких несуществующих каталогов. Я просто подумал, что это может помочь.
Как создать сразу tmp1
во всех подкаталогах?
Если это может быть сделано, как я его расширить для создания \tmp1
, \tmp2
, \tmp3
в \a
, \b
и \c
сразу?
Изменить: Я пропустил упоминание о том , что каталоги не должны быть простыми и в порядке, как a
, b
, и c
т.д., и каталог будет создан не обязательно , как tmp1
, tmp2
.
$ [~ / practice] ls собака / кошка / крыса /
В них хотелось бы иметь что-то вроде
$ [~ / practice] ls * собака: красно синий/ Кот: красно синий/ крыса: красно синий/
Ответы:
С шариками :
НОТА
*/
как globЕсли вы хотите создать несколько подкаталогов одновременно:
for dir in */; do mkdir -- "$dir"/{tmp1,foo,bar,qux}; done
источник
for i in */; do mkdir "$i/itemone" "$i/itemtwo"; done
для нескольких, не по порядку имена каталогов?источник
С GNU или BSD * найти:
или используя расширение параметра:
* Включает OS X
источник
find . -name . -o -prune -type d -exec sh -c 'exec mkdir "$1/newdir"' sh {} \;
Не по теме, так как вы упоминаете
bash
, но для записи, с zsh, вы бы сделали:$^var
включает в себя фигурное расширение для расширения массива. Это напоминает операторrc
s^
и вrc
(или его производнуюes
), вы бы написали:Однако обратите внимание (и то же самое относится к решениям bash, приведенным здесь), что в решении rc
dirs
также будут содержаться символические ссылки на каталоги. В решении zsh измените*(/)
на,*(-/)
если хотите включить символические ссылки на каталоги.источник
-p
флага.Похоже, цикл по родительским каталогам:
Добавьте
--
после,mkdir
если у вас могут быть каталоги, название которых начинается с-
.В zsh вы можете сделать это с помощью команды
e
glob :но быстрее набрать это двумя командами:
источник
mkdir -- whatever
и опускаю,--
если вы намерены расширить то, что может быть принято в качестве опции дляmkdir
команды». Там нет смысла опускать--
здесь. Это может не быть проблемой в случае ОП, но это в общем случае. Я думаю, что мы обязаны преподавать правильный и безопасный синтаксис здесь.--
цитаты и большие жирные предупреждения, когда переводы строк не поддерживаются. В контексте командной строки я предпочитаю показывать быструю версию, которая сначала работает на практике, и пуленепробиваемую версию в качестве дополнения.Вы можете сделать это так:
источник
Вариация ответа sputnick, которая позволяет избежать файлов, не являющихся каталогами:
источник
if [ -d "$x" ];…
?Это хороший вариант из старых Unix Masters (тестировался на FreeBSD 10.1), если вы хотите контролировать версию (с заблокированной проверкой RCS: ci -l с кратким комментарием как ir: для первоначального выпуска) ваших файлов конфигурации / etc / * на ~ / .his / etc
источник
Должно быть \! Назовите "RCS", и это лучше всего работает при первой регистрации.
sudo найти ~ / .his / etc \! имя "RCS" -ls
sudo найти -d ~ / .his / etc \! имя "RCS" | xargs sudo ci -l -mir -t-ir
Этот последний также очень хорошо работает для cjeck в части фильтрации всего содержимого RCS по имени файла:
sudo find -d ~ / .his / etc -type f | grep -v RCS | xargs sudo ci -l -mir -t-ir
источник
это большая помощь для меня. мне нужно было создать набор подкаталогов в нескольких папках и что-то вроде:
работал отлично, за исключением случаев, когда встречается пробел. есть ли способ игнорировать пробелы в
*/*/
части аргументов?источник