Как я могу рекурсивно найти все файлы в текущей и подпапках на основе регулярных выражений - PullRequest
2 голосов
/ 11 июля 2019

Мне нужно найти все файлы с именами, соответствующими разным регулярным выражениям, в каталогах и подкаталогах и распечатать информацию о них.

Например, у меня есть 3 каталога:

/foo1
/foo1/foo2
/foo1/foo2/foo3

Файлы вэто каталоги fgg1_1 fgg2_1 fgg3_1:

/foo1/fgg1_1
/foo1/foo2/fgg2_1
/foo1/foo2/foo3/fgg3_1

И мне нужно найти все файлы, соответствующие RE 'f.+1$'.Кто-то может подумать, что нужно использовать

find /foo -regex 'f.+1$' -printf '%f %A@ %s \n'

, но, безусловно, он не будет ничего соответствовать, потому что -regex оценивает полные имена файлов, например /foo1/foo2/fgg2_1.

Я попытался получить вывод, но это не сильно помогло, так как мне все еще нужно получить информацию о файлах, которые я нахожу

find /foo -print '%f\n' | grep 'f.+1$'

Важно отметить, что я ищудля несколько универсального решения, поскольку эта команда выполняется на удаленном хосте через ssh и компилируется с использованием скрипта Python, поэтому пути и RE для имен файлов могут каждый раз отличаться

Solution

Вы будетенужно убрать все символы ^ с начала RE файла

find /foo -regex '.*\/f.+1$' -printf '%p %f %h %Y %G %U %A@ %C@ %T@ %s\n'

немного излишним, но в итоге я использовал это из-за того, как stat отображает c_time

find /foo | grep -e '.*\/f.+1$' | xargs stat --printf '%n %F %g %u %X %Z %Y %s %A\n'

Ответы [ 2 ]

3 голосов
/ 11 июля 2019

Чтобы соответствовать целым путям, оканчивающимся на имя файла, соответствующее заданному регулярному выражению, вы можете добавить к нему .*/, например .*/f.+1$..*/ должен соответствовать пути, предшествующему имени файла.

0 голосов
/ 11 июля 2019

если вам не нужно регулярное выражение, вы можете попробовать:

find / foo -name "fgg *" |xargs ls -l

...