Сопоставление всех файлов во всех вложенных каталогах с помощью оболочки - PullRequest
22 голосов
/ 03 декабря 2010

Есть ли способ использовать глобализацию оболочки для идентификации вложенных каталогов?

, поэтому, если у меня есть dir / dir1 / dir2 / dir3 / dir4 / dir5 / .. и у меня есть файлы под ними,является эквивалентным шаблоном слияния для соответствия всем файлам во всех каталогах, например, - ls -R

Ответы [ 6 ]

22 голосов
/ 03 декабря 2010

В Bash 4 с shopt -s globstar и zsh вы можете использовать **/*, который будет включать все, кроме скрытых файлов. Вы можете сделать shopt -s dotglob в Bash 4 или setopt dotglob в zsh, чтобы включить скрытые файлы.

В ksh, set -o globstar включает его. Я не думаю, что есть способ неявного включения точечных файлов, но я думаю, что **/{.[^.],}* работает.

6 голосов
/ 03 декабря 2010

В частности, о git (gitignore, gitattributes и командах, которые принимают имена файлов): если шаблон не содержит косой черты, * подстановочные знаки будут соответствовать глубоким. Если он содержит косую черту, git будет вызывать fnmatch с флагом FNM_PATHNAME, а простые подстановочные знаки не будут совпадать с косой чертой. ** для глубокого соответствия не поддерживается. Может быть, этот вид глубокого соответствия может быть более широко поддержан с новым флагом FNM_STARSTAR и реализацией в glibc, gnulib и других местах.

2 голосов
/ 03 декабря 2010

Если вы хотите воздействовать на все файлы, возвращаемые функцией find, а не просто перечислять их, вы можете направить их в xargs:

find <directory> -type f | xargs ls

Но это только для команд, которые не имеютрекурсивный флаг.

0 голосов
/ 19 апреля 2015

Вы можете попробовать:

**/*.*

Однако он будет игнорировать скрытые файлы (например, .git файлы). Иногда это спасатель жизни.

Подробнее на: Что рекурсивно распространяется на все файлы в текущем каталоге? на SO

0 голосов
/ 03 декабря 2010

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

tree <path>
0 голосов
/ 03 декабря 2010

Невозможно сделать это с помощью vanilla Bash, однако большинство команд принимают опцию -R или --recursive, чтобы указывать им переходить в каталоги.

Если вы просто хотите просмотреть список всех файловв любом месте каталога или его подкаталогов вы можете использовать find .

Для рекурсивного поиска файлов (-type f) с данным каталогом:

find <directory> -type f
...