Как найти файлы по типу файла?

Вы можете использовать программу cut следующим образом:

cat textfile.txt | cut -d':' -f2 | cut -d' ' -f2

Вот как это работает:

Сначала разделите текст уровень сигнала: 20 дБм (100,00 мВт) на разделителе «двоеточие» с опцией -d ':' и возьмите второе поле с опцией -f2 .

Затем разделите результат 20 дБм (100,00 мВт) на разделитель «пробел» и снова возьмите второе поле.

9
24.11.2018, 20:36
3 ответа

«Типы файлов» в системе Unix — это такие вещи, как обычные файлы, каталоги, именованные каналы, специальные символьные файлы, символические ссылки и т. д. Это типы файлов, которые findмогут фильтроваться с помощью -type] вариант.

Утилита findне может сама по себе различать «скрипт оболочки», «файл изображения JPEG» или любой другой тип обычного файла . Однако эти типы данных можно различить с помощью утилиты file, которая просматривает определенные сигнатуры в самих файлах, чтобы определить их тип.

Распространенным способом маркировки различных типов файлов данных является их MIME-тип , и fileможно определить MIME-тип файла.


Использование fileс findдля определения MIME-типа обычных файлов и его использование только для поиска сценариев оболочки:

find. -type f -exec sh -c '
    case $( file -bi "$1" ) in (*/x-shellscript*) exit 0; esac
    exit 1' sh {} \; -print

или, используя bash,

find. -type f -exec bash -c '
    [[ "$( file -bi "$1" )" == */x-shellscript* ]]' bash {} \; -print

Добавьте -name sunriseперед -exec, если вы хотите обнаруживать только скрипты с таким именем.

Приведенная выше команда findнайдет все обычные файлы в текущем каталоге или ниже него и для каждого такого файла вызовет короткий скрипт в -строковой оболочке. Этот скрипт запускает file -biдля найденного файла и завершает работу с нулевым статусом выхода, если вывод этой команды содержит строку /x-shellscript. Если вывод не содержит этой строки, он завершается с нулевым статусом выхода, отличным от -, что приводит к немедленному продолжению findсо следующим файлом. Если было обнаружено, что файл является сценарием оболочки, команда findпродолжит вывод пути к файлу (и -printв конце, который также может быть заменен каким-либо другим действием ).

Команда file -biвыводит MIME-тип файла. Для сценария оболочки в Linux (и большинстве других систем )это будет что-то вроде

text/x-shellscript; charset=us-ascii

в то время как в системах с более старой версией утилиты fileэто может быть

application/x-shellscript

Общий бит — это подстрока /x-shellscript.

Обратите внимание, что в macOS вам придется использовать file -bIвместо file -biпо причинам(опция -iделает что-то совсем другое ). В остальном вывод в macOS похож на вывод в системе Linux.


Если вы хотите выполнить какое-то пользовательское действие над каждым найденным скриптом оболочки, вы можете сделать это с другим -execвместо -printв командах findвыше, но также можно было бы сделать

find. -type f -exec sh -c '
    for pathname do
        case $( file -bi "$pathname" ) in
            */x-shellscript*) ;;
            *) continue
        esac

        # some code here that acts on "$pathname"

    done' sh {} +

или с bash,

find. -type f -exec bash -c '
    for pathname do
        [[ "$( file -bi "$pathname" )" != */x-shellscript* ]] && continue

        # some code here that acts on "$pathname"

    done' bash {} +

Связанные:

21
27.01.2020, 20:06

Использование perlмодуля File::LibMagic:

perl -MFile::LibMagic=:easy -MFile::Find -le '
  find sub {
    print $File::Find::name if
      $_ eq "sunrise" and
      -f and
      MagicFile$_ eq "PEM RSA private key"
  }, @ARGV' --.
0
27.01.2020, 20:06

Вы можете выполнить findдля каждого найденного файла, а затем выполнить grep для получения интересующего вас результата.

# When looking for ASCII Text
find. -type -exec file {} \; | grep "ASCII"
# or for MS Word Documents
find. -type f -exec file {} \; | grep "Microsoft Word"

Я предлагаю сделать шаблон поиска как можно ближе к вашим ожиданиям, чтобы количество ложноположительных совпадений было низким.

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

1
27.01.2020, 20:06

Теги

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