поиск нескольких файлов на основе файла, содержащего строку

Это происходит, когда вы копируете файл размером всего 27 байт(strace cp a b):

read(3, "Who\222s there?\nIt's just me!\n", 131072) = 27
write(4, "Who\222s there?\nIt's just me!\n", 27) = 27
read(3, "", 131072)                     = 0

Хотя cpзнает размер (и он не меняется при копировании,)cpпытается прочитать до 128К данных. Он останавливает копирование, если read()доставляет нулевые байты. Это признак того, что достигнут конец файла.

Если процесс копирования будет считывать данные медленнее, чем они записываются (, например.из-за разных приоритетов ввода-вывода или других ограничений ввода-вывода, таких как контроллеры cgroups ), копирование «никогда» не остановится.

0
30.03.2020, 02:18
2 ответа
grep -Fxf list_of_emails.txt files...

find... -type f -exec grep -Fxf list_of_emails.txt /dev/null {} +

Замените ...в команде findсписком файлов и каталогов и, возможно, другими предикатами find.

/dev/nullзаставит grepвсегда добавлять к результату префикс с именем файла, чего grep не делает при вызове с одним файлом. Это эмулирует опцию -HGNU grep, которая не является переносимой.

0
19.03.2021, 02:31

Если вы знаете список файлов для поиска адресов электронной почты, вы можете

grep -F -H -w -o -f email_list_file list of files to search | awk -F: '{print "*** this email " $2 " found in " $1 "**}'

Флаг «-w» уменьшит , но не устранит некоторые из ложных срабатываний, на которые Эд указывает в комментариях. Флаг «-o» необходим для печати только адреса электронной почты, а не всей строки, содержащей его.

1
19.03.2021, 02:31

Теги

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