Я хочу запустить команду для:
- Найти все каталоги с именем "
inc
" в папке "X
". - Список всех подкаталогов под каждым "
X/.../inc/
". - Перенаправить вывод в файл с именем "
list
"
Я пробовал различные комбинации приведенной ниже команды, но безуспешно:
$ find X/ -name "inc" -print | xargs find {} -type d > list
find: path must precede expression
Как я могу это сделать?
linux
command-line
find
iammilind
источник
источник
Вот удобная строчка:
Он работает
find
на каждом из первыхfind
результатов.exec
Вариант может также взять минимальную команду оболочки, в которой - как я уже сказал -{}
заменяется каждой директории из первыхfind
.Второй
find
, по вашему запросу, «перечислит все подкаталоги» первых результатов, включаяinc
каталог. Если вы сами этого не хотите выводить, позвольте вторымfind
хотя бы вывести папки глубиной 1.Затем мы просто перенаправим команду
stdout
вlist
.источник
find path -name inc -type d -exec sh -c 'find {} -mindepth 1 -maxdepth 1 -type d' \;
Хорошо, я нашел ответ, чтобы смоделировать эту вложенную находку:
источник
find X/ -type d -print0 | awk 'BEGIN{RS="\0"}/\/inc\//' > list
(grep -z
также разделяет нулевой символ, но его выходные данные, похоже, также разделены нулями, так что тогда нужно будет передать его, например,xargs -0L1 echo
чтобы получить его построчно ). В этом случае, поскольку вы сохраняете список в файл с каждой записью, разделенной новой строкой, новые строки в именах файлов по- прежнему будут представлены неоднозначно. Возможно, вам даже не нужен промежуточный файл, в зависимости от того, что вы хотите сделать со списком.Попробуй это:
источник
"\inc\"
:)-path
флагом