linux включает все каталоги - PullRequest
0 голосов
/ 25 января 2012

как мне ввести путь к файлу в терминале Ubuntu, чтобы включить все файлы во все подкаталоги?

Если бы у меня был главный каталог с именем «books», но у меня было множество подкаталогов со всевозможными именами, содержащими файлы, как бы я набрал путь для включения всех файлов во все подкаталоги?

/ книги / ???

Ответы [ 3 ]

1 голос
/ 25 января 2012

В верхнем каталоге книг вы можете использовать команду:

find . -type f

Затем, если вы хотите, скажем, запустить каждый файл через cat, вы можете использовать xargsкоманда:

find . -type f | xargs cat

Для получения дополнительной информации используйте команды:

man find

man xargs

0 голосов
/ 25 января 2012

Непонятно, чего вы на самом деле хотите ... Возможно, вы получите лучшее решение своей проблемы, если попросите об этом напрямую, а не о другой проблеме, с которой вы столкнулись, пытаясь обойти исходную проблему.

Вы имеете в виду что-то вроде следующего?

file */*

где первый * раскрывается для всех подкаталогов, а второй * для всех содержащихся файлов?

Я выбрал команду file произвольно. Вы можете выбрать любую команду, которую хотите запустить для файлов, которые вы раскрываете в оболочке. Также обратите внимание, что каталоги также будут включены (если не исключены по имени, например, *.png или *.txt). Подстановочный знак * не совсем путь к файлу для включения всех файлов во все подкаталоги , но он распространяется на все файлы (или каталоги), соответствующие выражению подстановочного знака в виде списка, например, file1 file2 file3 file4. См. Также это руководство по расширению оболочки .

Обратите внимание, что могут быть простые решения связанных проблем. Как скопировать все файлы во всех подкаталогах (например, cp -a, см. man cp).

Мне тоже очень нравится find. Довольно просто создать более гибкие шаблоны поиска в сочетании с grep. Чтобы привести случайный пример:

du `find . | grep some_pattern_to_occur | grep -v some_pattern_to_not_occur`
0 голосов
/ 25 января 2012
./books/*

Например, если я нахожусь в родительском каталоге 'books':

ls ./books/*

EDIT:

На самом деле, чтобы перечислить вседерево рекурсивно вы должны использовать:

ls -R ./books/*
...