Этот один -лайнер является наиболее эффективным способом поиска 100% nul-файлов с помощью GNU find
, xargs
и grep
(, предполагая, что последний построен с поддержкой PCRE):
find. -type f -size +0 -readable -print0 |
LC_ALL=C xargs -r0 grep -LP "[^\x00]" --
Преимущества этого метода перед другими предоставленными ответами::
Permission denied
предупреждений. grep
прекратит чтение данных из файлов после обнаружения любого не-нулевого байта (LC_ALL=C
, чтобы убедиться, что каждый байт интерпретируется как символ). grep
процессов эффективно проверяют несколько файлов. -
, обрабатываются правильно. Передача параметра -Z
в grep
и использование xargs -r0...
позволяет выполнять дальнейшие действия над файлами со 100 % NULL (, например :очистка):
find. -type f -size +0 -readable -print0 |
LC_ALL=C xargs -0 grep -ZLP "[^\x00]" -- |
xargs -r0 rm --
Я также рекомендую использовать опции find
-P
, чтобы избежать перехода по символическим ссылкам,и -xdev
чтобы избежать обхода файловых систем (например, :удаленное монтирование, деревья устройств, связывание монтирования и т.д. ).
Для игнорирования символа конца строки (s)должен работать следующий вариант (, хотя я не думаю, что это хорошая идея):
find. -type f -size +0 -readable -print0 |
LC_ALL=C xargs -r0 grep -LP "[^\x00\r\n]" --
Собираем все воедино, включая удаление ненужных файлов (100 % символов nul / newline ), чтобы предотвратить их резервное копирование:
find -P. -xdev -type f -size +0 -readable -print0 |
LC_ALL=C xargs -0 grep -ZLP "[^\x00\r\n]" -- |
xargs -0 rm --
Я не рекомендую включать пустые файлы (нулевые байты ), они часто существуют для оченьспецифическихцелей .
Я смог определить виновника и нашел обходной путь. Проблема связана с подключенным постоянным диском в Azure, где находятся мои $HOME
и .lesshst
. Эта машина является виртуальной машиной DevTest Lab.
Те постоянные диски Azure, которые переживают -создание виртуальных машин, имеют некоторые серьезные проблемы с записью файлов. Это не просто less
. Даже mv
в GitBash и простая запись в файлы из Java тоже имеют проблемы.
Итак, я переместил свой .lesshst
в более надежное хранилище (на диск NAS )с помощью LESSHISTFILE
переменной env.