Как grep/найти список имен файлов?

avatar
John Smith
8 апреля 2018 в 00:08
269
3
0

Например, у меня есть текстовый документ со списком имен файлов, которые могут быть в каталоге. Я хочу использовать grep или find, чтобы узнать, существуют ли эти имена файлов в определенном каталоге и подкаталогах внутри него. В настоящее время я могу сделать это вручную через find . | grep filename, но это по одному, и когда у меня более 100 имен файлов, мне нужно проверить, есть ли они у меня или нет, что может быть очень надоедливым и трудоемким.

Как лучше всего это сделать?

Источник

Ответы (3)

avatar
John Smith
8 апреля 2018 в 23:54
0

Друг помог мне разобраться через find . | grep -i -Ff filenames.txt

avatar
user unknown
8 апреля 2018 в 03:25
0

Если файлы не перемещались с момента последнего запуска updateb, часто < 24 часов, самым быстрым поиском будет поиск.

Прочитайте список файлов в массив и выполните поиск по местонахождению. Если имена файлов являются общими (или встречаются как часть других файлов), grep их по базовому каталогу, где их найти:

< file.lst mapfile filearr
locate ${filearr[@]} | grep /path/where/to/find

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

avatar
Nothing Mi
8 апреля 2018 в 00:20
0

xargs — это то, что вам нужно. Дело в следующем:

Предположим, у вас есть файл с именем filenames.txt, содержащий список файлов

.
a.file 
b.file 
c.file 
d.file 
e.file

и только e.file не существует.

команда в терминале:

cat filenames.txt | xargs -I {} find . -type f -name {}

вывод этой команды:

a.file
b.file
c.file
d.file

Возможно, это будет полезно.

John Smith
8 апреля 2018 в 00:28
0

Итак, в качестве теста я сделал 3 папки, основную папку, затем два подкаталога. В первом подкаталоге я поместил 4 имени файла, помеченных как 123 234 654 999, во втором подкаталоге я поместил 3 имени файла, помеченных как 457 546 6969. При поиске у меня было это проблема: $ cat имена файлов.txt | xargs find find: '6969\r': такого файла или каталога не найдено: '123\r': такого файла или каталога не найдено: '234\r': такого файла или каталога не найдено: '999': такого файла нет или каталог

Nothing Mi
8 апреля 2018 в 00:43
0

cat filenames.txt | xargs -I {} find . -type f -name {}, настройка сложных аргументов должна использоваться в xargs