Вы будете, вероятно, видеть большинство главных преимуществ при помощи сжатия с помощью -C
опция. Можно также включить его в Вашем sshd_config
при помощи следующей строки:
Compression yes
find -iname '*.xml'
Иначе Ваша оболочка расширяется *.xml
кому: XYZ.xml
, и команда, которая на самом деле выполняется,
find -iname XYZ.xml
Причина это работает, при отсутствии XML-файлов в текущем каталоге, состоит в том, который обычно окружает подстановочные знаки отпуска, нерасширенные, если они ничему не соответствуют. В целом любое время Вы хотите, чтобы подстановочные знаки были расширены программой кроме оболочки (например, find
, tar
, scp
, и т.д.) необходимо заключить им в кавычки так, оболочка не попытается развернуть их сама.
Необходимо заключить аргумент в кавычки как это:
find ./ -name '*.xml'
так, чтобы это было передано для нахождения вместо того, чтобы быть расширенным оболочкой, затем передало для нахождения как расширенная версия.
*.xml
ничему не соответствует в текущем каталоге, он передается буквально, который является, почему он работает в другом случае. Очень полезный ответ. положительная сторона
– Eric Wilson
09.06.2011, 16:17
*
должен всегда заключаться в кавычки или оставляться для передачи его для нахождения.
– Caleb
09.06.2011, 16:15
Это работает над Солярисом 10:
find /directory-to-search/* -prune -name "*gz"
Подстановочные знаки раскрываются оболочкой, а не командой. find
— одна из немногих команд, выполняющих сопоставление с подстановочными знаками, аналогичное оболочке, в свое время.
Когда вы запускаете ls *.xml
, сначала оболочка расширяет *.xml
до списка соответствующих файлов, например. file1.xml
file2.xml
file3.xml
, а затем оболочка вызывает ls
с результирующим списком аргументов file1.xml
file2.xml
file3.xml
. Вот почему вы видите тот же список имен файлов с echo *.xml
, хотя echo
ничего не знает о файлах и не заботится о том, являются ли его аргументы именами файлов.
Когда вы бежитеfind. -name "*.xml"
:
find
, .
, -name
, *.xml
, где *
цитируется. Поскольку *
взят в кавычки, это обычный символ с точки зрения оболочки. find
с указанным списком аргументов :.
, -name
, *.xml
. find
ищет файлы, имя которых соответствует шаблону *.xml
в любом каталоге в текущем каталоге. При запуске find. -name *.xml
и отсутствии файлов, соответствующих*.xml
:
find
, .
, -name
, *.xml
, где *
не заключено в кавычки. *.xml
содержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла. Поскольку соответствующих имен файлов нет, шаблон остается нераскрытым. find
с полученным списком аргументов: .
, -name
, *.xml
. find
ищет файлы, имя которых соответствует шаблону *.xml
в любом каталоге в текущем каталоге.Когда вы запускаете find. -name *.xml
и текущий каталог содержит file1.xml
, file2.xml
иfile3.xml
:
find
, .
, -name
, *.xml
, где *
не заключено в кавычки. *.xml
содержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла.:*.xml
заменяется списком совпадающих имен файлов. find
с полученным списком аргументов: .
, -name
, file1.xml
, file2.xml
, file3.xml
. find
жалуется на синтаксическую ошибку, когда достигает file2.xml
. Когда вы запускаете find. -name *.xml
и текущий каталог содержит один соответствующий файлfile.xml
:
find
, .
, -name
, *.xml
, где *
не заключено в кавычки. *.xml
содержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла :*.xml
, заменяется списком совпадающих имен файлов. find
с полученным списком аргументов: .
, -name
, file.xml
. find
видит вполне допустимую команду, но, вероятно, это не то, что вы хотели.:find
сказано искать файлы с именем file.xml
в любом каталоге, а не искать какой-либо файл, соответствующий *.xml
. (Оценка и расширение оболочки имеет множество других функций. Я упомянул только те, которые актуальны здесь.)
(То, что я описываю, является поведением по умолчанию большинства распространенных оболочек :sh, bash, dash, ksh, … Некоторые оболочки могут быть настроены для отображения ошибки вместо запуска команды с нерасширенными подстановочными знаками,или расширить не соответствующие -подстановочные знаки до пустого списка. Ни один из них не поможет здесь.)
bash
, неfind
. – user unknown 29.05.2011, 17:03