В Linux.
Я знаю, что могу это сделать find . -type f
, но это включает двоичные файлы, и я не смог найти способ исключить их с помощью find
решение1
file /usr/bin/file
, например, не включает слово "binary" в свой вывод на моей системе. Если file -i
доступно, оно включает слово "binary". Без -i
, возможно, более надежной будет проверка на наличие слова "text".
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
.
решение2
Другой способ — исключить все файлы, для которых установлено разрешение на выполнение для пользователя, группы или других лиц:
find . -type f ! -perm /u=x,g=x,o=x
(Если двоичный файл соответствует разрешениям на выполнение...)
решение3
показать все файлы без прав на исполнение (хотя это не совсем двоичные файлы, так что это может быть не совсем то, что вам нужно):
ls -l | awk '{if ($1 !~ /x/) print $8}'
решение4
Попробуйте следующую команду:
find . -type f -exec file "{}" \; | grep -vE "ELF|archive"