У меня есть много существующих подкаталогов, например:
/path/to/my/subs/a
/path/to/my/subs/b
/path/to/my/subs/c
Нет, я хочу создать новый файл в каждом из них. Имя файла постоянно, например:
/path/to/my/subs/a/foo.md
/path/to/my/subs/b/foo.md
/path/to/my/subs/c/foo.md
Как мне это сделать? Я надеялся, touch /path/to/my/subs/*/foo.md
что сделаю, но там было написаноtouch: /path/to/my/subs/*/foo.md: No such file or directory
решение1
Предполагая, что вы используете bash
в качестве оболочки, используйте расширение скобок.
touch /path/to/my/subs/{a,b,c}/foo.md
решение2
Вы можете использовать find
утилиту:
find /path/to/my/subs -type d -links 2 -exec touch "{}/foo.md" \;
Эта команда пройдет по всему дереву, начиная с subs, найдет конечные (терминальные) каталоги и обратится к файлу foo md там.
Вы также можете опустить часть "-exec"... и использовать xargs
для создания всех файлов вместе в конце, создавая меньше touch
двоичных файлов, или использовать одно касание:
touch $( find /path/to/my/subs -type d -links 2 | sed -e 's#$#/foo.md#g' )
Часть find
получит каталоги и sed
преобразует их в соответствующие имена файлов.
Если у вас один уровень каталогов:
для dir в /path/to/my/subs/*; коснитесь $dir/foo.md ; готово