54

Часто у меня есть имя файла и его частичный путь, например «content /docs /file.xml».

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

Было бы здорово, если бы find работал таким образом, чтобы я мог запустить find content/docs/file.xml , но, к сожалению, это не так.

4 ответа4

60

Передайте подстановочный знак * чтобы указать совпадение для чего-либо. Вы также должны экранировать * s, например:

find . -path \*content/docs/file.xml

или заключите шаблон в кавычки, например:

find . -path "*content/docs/file.xml"

Как описано на странице руководства:

$ найти. -name * .c -print

find: пути должны предшествовать выражению

Это происходит потому, что оболочка * .c была расширена, в результате чего find фактически получает командную строку, например:

находить . имя bigram.c code.c frcode.c locate.c

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

$ найти. -name \*. c -print

8

find также имеет опцию -wholename find $top_dir -wholename *string*

find /usr -wholename *in/abiw*

>/usr/bin/abiword
3
find . -type f | grep "content/docs/file.xml"

или просто

locate content/docs/file.xml
1

Например, для поиска файлов в местоположении, используя звездочку / подстановочный знак (*) как: dir=“/apps/*/instance01/" вы можете использовать find ${dir} -name “*.jks” . поместив все файлы в массив следующим образом:

arr=(`find ${dir} -name “*.jks"`)

если вы хотите получить файлы с другими расширениями, используйте «или», например:

-name "*.keystore" -o -name "*.jks" -o -name “*.p12" потому что -name принимает только одну строку, поэтому используйте 'или'.

Наконец, поместите все в массив следующим образом:

arr=(`find ${dir} -name "*.keystore" -o -name "*.jks" -o -name "*.p12"`)

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

arr=(“/Users/ajay/Documents/keystore_and_p12files/"*.{keystore,p12,jks})

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .