Меньше перестал сохранять историю поиска

Этот один -лайнер является наиболее эффективным способом поиска 100% nul-файлов с помощью GNU find, xargsи grep(, предполагая, что последний построен с поддержкой PCRE):

find. -type f -size +0 -readable -print0 |
  LC_ALL=C xargs -r0 grep -LP "[^\x00]" --

Преимущества этого метода перед другими предоставленными ответами::

    В поиск включаются
  • не -разреженные файлы.
  • не -недоступные для чтения файлы не передаются в grep, что позволяет избежать Permission deniedпредупреждений.
  • grepпрекратит чтение данных из файлов после обнаружения любого не-нулевого байта (LC_ALL=C, чтобы убедиться, что каждый байт интерпретируется как символ).
  • пустые файлы (нулевые байты )не включаются в результаты.
  • меньше grepпроцессов эффективно проверяют несколько файлов.
  • пути, содержащие новую строку или начинающиеся с -, обрабатываются правильно.
  • работает на большинстве встраиваемых систем, в которых отсутствует Python/Perl.

Передача параметра -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 --

Я не рекомендую включать пустые файлы (нулевые байты ), они часто существуют для оченьспецифическихцелей .

3
08.01.2021, 05:19
1 ответ

Я смог определить виновника и нашел обходной путь. Проблема связана с подключенным постоянным диском в Azure, где находятся мои $HOMEи .lesshst. Эта машина является виртуальной машиной DevTest Lab.

Те постоянные диски Azure, которые переживают -создание виртуальных машин, имеют некоторые серьезные проблемы с записью файлов. Это не просто less. Даже mvв GitBash и простая запись в файлы из Java тоже имеют проблемы.

Итак, я переместил свой .lesshstв более надежное хранилище (на диск NAS )с помощью LESSHISTFILEпеременной env.

1
18.03.2021, 22:49

Теги

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