Сопоставьте все файлы под всеми вложенными каталогами с чередованием оболочки
Есть ли способ использовать командную оболочку для определения вложенных каталогов?
поэтому, если у меня есть dir/dir1/dir2/dir3/dir4/dir5/.. и у меня есть файлы под всеми ними, каков эквивалентный шаблон подстановки для соответствия всем файлам во всех каталогах, аналогично - например - ls -R
Ответы
Ответ 1
В Bash 4 с shopt -s globstar
и zsh вы можете использовать **/*
, который будет включать все, кроме скрытых файлов. Вы можете сделать shopt -s dotglob
в Bash 4 или setopt dotglob
в zsh, чтобы включить скрытые файлы.
В ksh используется set -o globstar
. Я не думаю, что есть способ включить точечные файлы неявно, но я думаю, что **/{.[^.],}*
работает.
Ответ 2
В частности, о git (gitignore, gitattributes и командах, которые принимают имена файлов): если шаблон не содержит косой черты, подстановочные символы *
будут соответствовать глубине. Если он содержит слэш, git вызовет fnmatch с помощью FNM_PATHNAME
, а простые подстановочные знаки не будут совпадать с косой чертой. **
для соответствия глубине не поддерживается. Возможно, такое глубокое сопоставление может быть более широко поддерживается новым флагом FNM_STARSTAR
и реализацией в glibc, gnulib и других местах.
Ответ 3
Если вы хотите действовать во всех файлах, возвращаемых find, а не просто перечислить их, вы можете передать их в xargs:
find <directory> -type f | xargs ls
Но это только для команд, которые не имеют рекурсивного флага.
Ответ 4
Нет способа сделать это с помощью vanilla Bash, однако большинство команд принимают параметр -R
или --recursive
, чтобы сообщить им спуститься в директории.
Если вы просто хотите перечислить все файлы, расположенные в любом месте каталога или его подкаталогов, вы можете использовать find.
Чтобы рекурсивно найти файлы (-type f
) с заданным каталогом:
find <directory> -type f
Ответ 5
Вы можете использовать дерево, оно будет рекурсивно отображать все папки.
tree <path>
Ответ 6
Вы можете попробовать:
**/*.*
Однако он будет игнорировать скрытые файлы (например, файлы .git
). Иногда это спасает жизнь.
Подробнее: Что расширяет для всех файлов в текущем каталоге рекурсивно? в SO