Может ли кто-нибудь объяснить, как эта команда терминала используется для поиска изображений? - PullRequest
0 голосов
/ 10 февраля 2019

Я нашел эту команду, чтобы найти все изображения, даже если они не имеют расширений файлов.Тем не менее, я не знаю, как это работает и не люблю использовать вещи, которые я не понимаю

find . -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image'

1 Ответ

0 голосов
/ 10 февраля 2019

По сути, алгоритм равен для каждого файла в текущем каталоге и во всех его подкаталогах, получить информацию о файле, найти слово «изображение» и напечатать строки, соответствующие

Я разобью команду на части ...

find . -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image'
  • find - пройдусь по иерархии файлов и выведу список файлов
  • . - началов текущем каталоге
  • -name '*' - рассмотреть все имена файлов
  • -exec file {} \; - для каждого файла, возвращенного find, выполнить file, чтобы определить тип файла.{} - это заполнитель для имени, возвращенного из find
  • | - передать результаты предыдущей команды в следующую команду
  • grep - выполнить регулярное выражениесовпадение с образцом в каждой строке, переданной по
  • -o - сокращение от --only-matching;печатает только совпадающую часть строк
  • -P '^.+: \w+ image' - ищет указанный шаблон, который по существу говорит: строки, содержащие слово «изображение» .Google "regex cheatsheet", чтобы получить более глубокое понимание.

Вы можете просмотреть полные документы (справочные страницы) для каждого отдельного компонента, запустив man find, man file и man grep.Информация, отображаемая с помощью https://explainshell.com/ (которую @Cyrus упомянул в комментарии) поступает со справочных страниц - это удобный ярлык для поиска именно тех деталей, которые вам нужны.

Вы также можете запускать командыотдельно, чтобы поэкспериментировать: Запуск find . -name '*', file <file name> и find . -name '*' -exec file {} \; поможет визуализировать происходящее.

...