1

Имея такую файловую структуру:

/root/abc/1.txt
/root/abc/2.txt

и сидя в /root каталог.

1.) Почему не команда:

находить . -path "abc/*. txt"

пока не возвращает результатов

находить . -path "./abc/*.txt"

а также

находить . -path "*/abc/*. txt"

работает?

2.) Какая разница между find . -path "./abc/*.txt" и find . -path "*/abc/*.txt"

2 ответа2

2

Вопрос 1:

Параметр -path pattern соответствует всему имени файла.

$ find
.
./abc
./abc/1.txt
./abc/2.txt

Шаблон abc/*.txt не соответствует без ведущего ./ .

Вопрос 2:

Подстановочный знак * может соответствовать любой строке любой длины (включая символы / и . ). Параметр -path "*/abc/*.txt" имеет две маски, поэтому он может соответствовать любому из следующих:

./abc/a.txt
*     *


./abc/ANYTHING.txt
*     ********

def/ghi/abc/SOMETHING.txt
*******     *********

./abc/def_dsa/faf.txt
*     ***********
0

Следующее предложение взято из опции -path руководства по find :

Обратите внимание, что проверка соответствия шаблону применяется ко всему имени файла, начиная с одной из начальных точек, указанных в командной строке.

Это объясняет, почему ваши альтернативные шаблоны поиска ("./abc/*.txt" и "*/abc/*.txt") работают. Ваш оригинальный шаблон поиска ("abc/*.txt") будет работать только в том случае, если корнем поиска является abc:

find abc/ -path "abc/*.txt"

Что касается разницы между "./abc/*.txt" и "*/abc/*.txt" , ни один из них не будет пытаться раскрыть строку перед вызовом find: первый найдет файлы только в каталоге верхнего уровня ./abc/ , но второй найдет файлы в любом подкаталоге abc , например ./def/abc/ , ./ghi/def/abc/ и т. д., а также ./abc/ .

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