Я пытаюсь перечислить все файлы из dir1
, dir2
, dir3
и dir4
которые могут быть в любом месте , как подкаталог моих с cwd
помощью find
команды. Я попробовал следующее безуспешно:
find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'
Я тоже старался posix-extended
. Как я могу перечислить эти файлы?
bash
find
regular-expression
Аарон
источник
источник
Ответы:
И если вы хотите найти три папки с именем
foo
,bar
иbaz
для всех*.py
файлов, используйте следующую команду:find foo bar baz -name "*.py"
так что если вы хотите отобразить файлы из
dir1
dir2
dir3
использованияfind dir1 dir2 dir3 -type f
попробуй это
find . \( -name "dir1" -o -name "dir2" \) -exec ls '{}' \;
источник
./dir
вместоdir
./path/to/dir1
), в этом случае./dir1
ее не будет.Лучше всего использовать директиву -path:
Что означает: найти все файлы в текущем каталоге, где в пути есть «dir1», «dir2», «dir3» или «dir4».
источник
-a
и-o
стандартный эквивалент GNU-and
/-or
.Просто чтобы все знали. Добавление
.*/
перед каждымdir
решило проблему, такregex
как, кажется, сопоставление с полным путем.источник
Это моя первая идея после прочтения предыдущих ответов:
Это принимает во внимание, что регулярное выражение должно соответствовать всему имени файла, и это легче понять.
источник
Пример быстрого (!) Поиска определенных файлов (access_log) в нескольких местах, определенных подстановочными знаками (домашний каталог) и общим каталогом журналов apache2, с применением также фильтрации имен для исключения журналов ssl и старых архивов gzipped. Непосредственно не отвечает на вопрос здесь, но может быть полезным для кого-то, кто нашел эти инструкции (как я).
Будьте осторожны с пробелами, особенно рядом с
\(
и\)
.Кстати, я использовал его для apachetop, чтобы найти наиболее активные веб-сайты на моем сервере.
источник
вам не нужно указывать от dir1 до dir4 по имени, если вы используете regextype
type f
: найти файлы, а не каталогиregextype sed
: использует sed regextyperegex
: поиск с использованием регулярных выражений по всему пути".*/dir[1-4]/[a-z0-9]*"
:. * в начале означает любое количество символов, которые могут иметь тип (char / number / backslash (/) и т. д.); dir [1-4] означает поиск «dir», за которым следует число от 1 до 4; / [^ /] * утверждает, что после dir1-4 пропускаются любые пути, в которых есть /, поэтому он возвращает только файлы в каталоге dir1-dir4 и игнорирует все подкаталоги, которые могут находиться в dir1-dir4.создал каталог для тестирования: https://github.com/alphaCTzo7G/stackexchange/tree/master/linux/findSolution04092017
источник
red
,green
,blue
иyellow
, или же они могут бытьJohn
,Paul
,George
иRingo
.) Ваш ответ предполагает , что они в буквальном смыслеdir1
,dir2
,dir3
иdir4
. … (Продолжение)foo_bar
,foo.txt
иFOO
)? (4) Почему ваш текст объясняет,/[^/]*
когда ваш ответ не использует его?Я знаю, что вы указали, что используя find, но только для показа других опций, которые можно использовать, вы можете использовать xargs:
Вы можете иметь файл с именем «папки», который содержит что-то вроде:
Затем вы можете сделать что-то вроде этого:
xargs по моему мнению, я чувствую себя более универсальным, чем найти -exec. Также вы можете сделать некоторые сумасшедшие вещи, такие как
источник