найдите не рекурсивными когда файл в вершине

Вы будете, вероятно, видеть большинство главных преимуществ при помощи сжатия с помощью -C опция. Можно также включить его в Вашем sshd_config при помощи следующей строки:

Compression yes
8
16.10.2019, 09:51
5 ответов
find -iname '*.xml'

Иначе Ваша оболочка расширяется *.xml кому: XYZ.xml, и команда, которая на самом деле выполняется,

find -iname XYZ.xml

Причина это работает, при отсутствии XML-файлов в текущем каталоге, состоит в том, который обычно окружает подстановочные знаки отпуска, нерасширенные, если они ничему не соответствуют. В целом любое время Вы хотите, чтобы подстановочные знаки были расширены программой кроме оболочки (например, find, tar, scp, и т.д.) необходимо заключить им в кавычки так, оболочка не попытается развернуть их сама.

18
27.01.2020, 20:08
  • 1
    Спасибо, это так просто, но я задавался вопросом, как обходить это в течение многих месяцев. Я нашел это действительно странным, и быть очень непоследовательным поведением, но теперь я понимаю, так как это не находка, но отказ удара. –  Olivier Toupin 29.05.2011, 04:47
  • 2
    Это не серовато-синий "отказ" удара, но Ваш для того, чтобы не заключать в кавычки подстановочные знаки, которые Вы хотели передать как аргументы. Это идет для всех программ, которые принимают вход оболочки. Оболочка разворачивает их как шарики, если им не заключают в кавычки или оставляют. –  Caleb 29.05.2011, 08:59
  • 3
    я предполагаю Olivier, означал это в значении, из которого это является проблема bash, не find. –  user unknown 29.05.2011, 17:03

Необходимо заключить аргумент в кавычки как это:

find ./ -name '*.xml'

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

6
27.01.2020, 20:08
  • 1
    Хорошо, итак, если *.xml ничему не соответствует в текущем каталоге, он передается буквально, который является, почему он работает в другом случае. Очень полезный ответ. положительная сторона –  Eric Wilson 09.06.2011, 16:17

Попробуйте:

find ./ -name *.xml
-2
27.01.2020, 20:08
  • 1
    я только что попробовал это, тот же результат. –  Eric Wilson 09.06.2011, 16:07
  • 2
    я попробовал его, и это работает. На 4.2.8 –  bbaja42 09.06.2011, 16:13
  • 3
    удара GNU Это не работает, когда шарик соответствует чему-либо в текущем каталоге. Это - неправильный синтаксис! * должен всегда заключаться в кавычки или оставляться для передачи его для нахождения. –  Caleb 09.06.2011, 16:15

Это работает над Солярисом 10:

find /directory-to-search/* -prune -name "*gz"

-1
27.01.2020, 20:08

Подстановочные знаки раскрываются оболочкой, а не командой. find— одна из немногих команд, выполняющих сопоставление с подстановочными знаками, аналогичное оболочке, в свое время.

Когда вы запускаете ls *.xml, сначала оболочка расширяет *.xmlдо списка соответствующих файлов, например. file1.xmlfile2.xmlfile3.xml, а затем оболочка вызывает lsс результирующим списком аргументов file1.xmlfile2.xmlfile3.xml. Вот почему вы видите тот же список имен файлов с echo *.xml, хотя echoничего не знает о файлах и не заботится о том, являются ли его аргументы именами файлов.

Когда вы бежитеfind. -name "*.xml":

  1. Оболочка анализирует командную строку для распознавания специальных символов и разбивает ее на слова и знаки препинания. Здесь просто список слов find, ., -name, *.xml, где *цитируется. Поскольку *взят в кавычки, это обычный символ с точки зрения оболочки.
  2. Оболочка запускает команду findс указанным списком аргументов :., -name, *.xml.
  3. findищет файлы, имя которых соответствует шаблону *.xmlв любом каталоге в текущем каталоге.

При запуске find. -name *.xmlи отсутствии файлов, соответствующих*.xml:

  1. Оболочка анализирует командную строку для распознавания специальных символов и разбивает ее на слова и знаки препинания. Здесь просто список слов find, ., -name, *.xml, где *не заключено в кавычки.
  2. Поскольку слово *.xmlсодержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла. Поскольку соответствующих имен файлов нет, шаблон остается нераскрытым.
  3. Оболочка запускает команду findс полученным списком аргументов: ., -name, *.xml.
  4. findищет файлы, имя которых соответствует шаблону *.xmlв любом каталоге в текущем каталоге.

Когда вы запускаете find. -name *.xmlи текущий каталог содержит file1.xml, file2.xmlиfile3.xml:

  1. Оболочка анализирует командную строку для распознавания специальных символов и разбивает ее на слова и знаки препинания. Здесь просто список слов find, ., -name, *.xml, где *не заключено в кавычки.
  2. Поскольку слово *.xmlсодержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла.:*.xmlзаменяется списком совпадающих имен файлов.
  3. Оболочка запускает команду findс полученным списком аргументов: ., -name, file1.xml, file2.xml, file3.xml.
  4. findжалуется на синтаксическую ошибку, когда достигает file2.xml.

Когда вы запускаете find. -name *.xmlи текущий каталог содержит один соответствующий файлfile.xml:

  1. Оболочка анализирует командную строку для распознавания специальных символов и разбивает ее на слова и знаки препинания. Здесь просто список слов find, ., -name, *.xml, где *не заключено в кавычки.
  2. Поскольку слово *.xmlсодержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла :*.xml, заменяется списком совпадающих имен файлов.
  3. Оболочка запускает команду findс полученным списком аргументов: ., -name, file.xml.
  4. findвидит вполне допустимую команду, но, вероятно, это не то, что вы хотели.:findсказано искать файлы с именем file.xmlв любом каталоге, а не искать какой-либо файл, соответствующий *.xml.

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

(То, что я описываю, является поведением по умолчанию большинства распространенных оболочек :sh, bash, dash, ksh, … Некоторые оболочки могут быть настроены для отображения ошибки вместо запуска команды с нерасширенными подстановочными знаками,или расширить не соответствующие -подстановочные знаки до пустого списка. Ни один из них не поможет здесь.)

1
20.08.2021, 13:35

Теги

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