Это происходит, когда вы копируете файл размером всего 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 ), копирование «никогда» не остановится.
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 не делает при вызове с одним файлом. Это эмулирует опцию -H
GNU grep, которая не является переносимой.
Если вы знаете список файлов для поиска адресов электронной почты, вы можете
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» необходим для печати только адреса электронной почты, а не всей строки, содержащей его.