Найти команду: путь к файлу vs -name Аргумент

В настоящее время я создаю скрипт для обработки некоторых файлов в каталоге. В первом примере я использую команду find и передаю директорию в качестве аргумента. Во втором я вместо этого использую ключ -name в команде find для передачи желаемого имени файла. Может ли кто-нибудь объяснить мне разницу между двумя ниже? Поскольку они дают точно такой же результат:

find dump* -type f -mtime +5 | xargs ls -ltrh

find $dir -type f -name "dump*" -mtime +5 | xargs ls -ltrh

Предположим, что в верхнем примере он запускается в каталоге, содержащем файлы. Во втором, однако, он может бежать оттуда. Моя главная проблема заключается в части файла filepath vs -name; поэтому, пожалуйста, сосредоточьте свое внимание таким образом, если сможете.

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

Благодарю.

One Solution collect form web for “Найти команду: путь к файлу vs -name Аргумент”

В первом случае dump* интерпретируется оболочкой и расширяется до совпадающих имен файлов, а затем передается для find . По сути, find видит:

 find dumpa dumpb ... -type f ... 

Во втором случае интерпретация не выполняется оболочкой. find фильтрацию. Поэтому, учитывая рекурсивный характер find , второй метод может найти файлы, которые первый пропустит.

Второй метод более гибкий, так как вы можете использовать переменные при формировании фильтров -name / -path , но сложно получить оболочку для расширения шаблона в переменной. В зависимости от того, что ваш вариант использования, либо будет правильным, но второй может быть скорректирован так, чтобы соответствовать первому во всех случаях (используя дополнительные параметры find , такие как maxdepth или prune ), но обратное неверно.

Рассматривать:

 $ tree . . ├── dumpa │  └── dumpc ├── dumpb ├── dumpd └── not-dump └── dumpe $ find . -type f -name 'dump*' ./not-dump/dumpe ./dumpd ./dumpa/dumpc $ find dump* -type f dumpa/dumpc dumpd 

Также обратите внимание, что если ничто не соответствует шаблону, первое приведет к ошибке, но вторая будет успешной без каких-либо результатов:

 $ find blahblah* -type f find: `blahblah*': No such file or directory $ find . -name 'blahblah*' -type f $ 

Я предпочел бы второй метод, потому что:

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

И несвязанный момент, пропустите xargs :

 find ... -exec ls -lrth {} + 
  • Всегда ли равен $ HOME
  • Правильный способ распространения сценариев оболочки
  • Сценарий оболочки, написанный в другой оболочке, чем моя текущая оболочка
  • grep для Java-метода
  • Добавить временные метки для вывода команды «top»
  • Проблема с булевыми тестами && и || в bash
  • Как получить PID подоболочки в Korn Shell (эквивалент $ BASHPID)
  • как отключить ожидание «нажмите enter» после выполнения сценария bash над cron
  • Найти каталог и скопировать другой каталог в найденный каталог?
  • Как использовать тройник для захвата STDOUT из кодового блока в имя файла, определенное в блоке?
  • Как читать и делать min / max / avg из потока NMEA
  • Interesting Posts

    дочерний процесс не наследует ожидающие сигналы от родителя после системного вызова fork, почему?

    Разрешение IP-адреса для получения имени домена

    Команды терминала, эквивалентные опции «Использовать как горячую точку» NetworkManager

    Не удается включить сеть после обновления системы CentOS 6.3

    Завершение Bash: отдельно показывайте результаты из разных источников

    Не устанавливать $? на ненулевое значение на Control + C

    Как извлечь одну папку из большого архива tar.gz?

    Почему ulimit -u намного больше, чем количество запущенных процессов, вызывает проблемы?

    Ошибка: зависимость не подлежит удовлетворению: libqtcore5a (> = 5.7.0)

    systemd: как требовать и производить установку определенной файловой системы?

    Создание точной копии установки Windows

    Частота процессора не будет превышать 800 МГц на моем Dell XPS 13 с плющом

    Комплексное связывание RHEL 5

    sed на вставке OSX на определенной строке

    Как изменить приоритет PATH для указанной команды в zsh

    Linux и Unix - лучшая ОС в мире.