Самый элегантный способ завершить программу straced

Чтобы избежать повторного сканирования дерева для каждого файла, можно один раз составить список дерева каталогов, а затем найти перевод пути в нижнем регистре в хеш-таблице. Например:

NL='
'
find . -name "*$NL*" -prune -o -print | awk '
  !list_processed {paths["./" $0]; next}
  tolower($0) in paths' file.list list_processed=1 -

(где file.list содержит список файлов в нижнем регистре, по одному в строке).

Мы пропускаем файлы (и не опускаемся в каталоги) с символами новой строки в именах, так как они не могут быть сохранены в file.list, если этот список разделен на новую строку (и нарушит это постобработка).

Обратите внимание, однако, что этот пропуск не будет работать, если имена файлов также содержат недопустимые символы. Подробнее см. в разделе byte vs character в Почему зацикливание вывода find является плохой практикой?.

1
25.02.2016, 21:04
1 ответ

Если ваш grep поддерживает это, вы можете использовать grep -m 1 ... , чтобы заставить его остановиться после того, как он нашел совпадение. Это приведет к закрытию канала и смерти strace, если он продолжает писать.

0
28.01.2020, 01:24

Теги

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