Найти команду: путь к файлу 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 {} + 
  • Как я могу объединить переменную оболочки с другими другими параметрами в моих командных строках?
  • Как установить переменную среды оболочки из файла autotools .am?
  • Написание сценария завершения вкладки для bash
  • Странная разница между pwd и / bin / pwd
  • когда использовать двойные кавычки с переменной в сценарии оболочки?
  • Приложения GUI не наследуют PATH из консольных приложений для родителей
  • Разрешить setuid для сценариев оболочки
  • Слияние нескольких файлов с максимальной разницей в 1 строку
  • как заставить getopts просто прочитать первое сообщение персонажа `-`
  • Как я могу запустить удаленный процесс на удаленной машине через ssh?
  • error = $ (mkdir test 2> & 1) В чем смысл этого выражения?
  • Linux и Unix - лучшая ОС в мире.