Почему find не выводит список совпадающих файлов, если перед ними стоит звездочка (*)? [duplicate]

Я подозреваю, что при загрузке программа сохраняет файл в неизвестном вам месте. После завершения он создает жесткую ссылку на тот же файл в папке загрузки, но при этом сохраняет жесткую ссылку в своем собственном каталоге (вероятно, ~/.transmission или что-то подобное).

Вы можете найти все жесткие ссылки на готовое скачивание, как описано в Как найти все жесткие ссылки на заданный файл? или использовать следующее: ~/Downloads выполните ls -i и запомните inode-номер вашего файла. Затем вы можете найти другой файл, выполнив find . -inum NUM в вашей домашней папке.

3
30.06.2016, 01:15
1 ответ

Потому что, когда вы используете только * net * (без каких-либо кавычек или экранирования), он будет расширен оболочкой как (существующий) файл / каталог net в текущем каталог перед запуском команды find . Таким образом, команда выглядит так:

find . -name net

Как видите, она просто соответствует net , поэтому usbnet.ko не будет сопоставлен.

Также обратите внимание, что без кавычек и экранирования, если шаблон не соответствует (и параметры nullglob и failglob отключены), он обрабатывается как ]. Так, например, для find. -name * net * , если имя файла не содержит net в текущем каталоге, поиск по шаблону будет * net * .


Итак, чтобы решить проблему, вам нужно избегать подстановки оболочки, для этого вы можете использовать кавычки или экранирование шаблонов подстановки:

find . -name '*net*' 
find . -name "*net*" 
find . -name \*net\* 
10
27.01.2020, 21:11

Теги

Похожие вопросы