перечислите/найдите все регулярные файлы во всех подкаталогах, исключая двоичные файлы

В Linux.

Я знаю, что могу сделать find . -type f, но это включает двоичный файл, и я не мог найти способ исключить их с находкой

5
задан 05.10.2010, 03:16

4 ответа

file /usr/bin/file, например, не включает слово "двоичный файл" в его вывод в моей системе. Если file -i доступно, это действительно включает слово "двоичный файл". Без -i, это может быть более надежно для тестирования на присутствие слова "текста".

find -type f -exec sh -c "file {} | grep text >/dev/null" \; -print

или

find -type f -exec sh -c "file {} | grep text >/dev/null" \; -ls

Используя -i:

find -type f -exec sh -c "file -i {} | grep -v binary >/dev/null" \; -print

Используя file только будет приближением, так как оно использует эвристику для определения типа файла и нет никакого твердого определения того, что составляет "двоичный" файл. Действительно ли пустой файл является "двоичным"? file говорит, что это. Кроме того, существует много из (обычно редко) способы инициировать ложные положительные идентификаторы file.

7
ответ дан 07.12.2019, 17:07

Иначе должен был бы исключить все файлы, которые имеют, выполняют набор полномочий или для пользователя, группы или для других:

find . -type f ! -perm /u=x,g=x,o=x

(Если двоичный файл равняется, выполняют полномочия...),

3
ответ дан 07.12.2019, 17:07

покажите все файлы без исполняемых полномочий (хотя это не является специфически двоичным, таким образом, это не может быть точно, в чем Вы нуждаетесь):

ls -l | awk '{if ($1 !~ /x/) print $8}'
0
ответ дан 07.12.2019, 17:07

Попробуйте следующую команду:

find . -type f -exec file "{}" \; | grep -vE "ELF|archive"
0
ответ дан 07.12.2019, 17:07

Теги

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