Подстановочные знаки раскрываются оболочкой, а не командой. find
— одна из немногих команд, выполняющих сопоставление с подстановочными знаками, аналогичное оболочке, в свое время.
Когда вы запускаете ls *.jav
, сначала оболочка расширяет *.jav
до списка соответствующих файлов, например. file1.jav
file2.jav
file3.jav
, а затем оболочка вызывает ls
с результирующим списком аргументов file1.jav
file2.jav
file3.jav
. Вот почему вы видите тот же список имен файлов с echo *.jav
, хотя echo
ничего не знает о файлах и не заботится о том, являются ли его аргументы именами файлов.
Когда вы бежитеfind. -name "*.jav"
:
find
, .
, -name
, *.jav
, где *
цитируется. Поскольку *
взят в кавычки, это обычный символ с точки зрения оболочки. find
с указанным списком аргументов :.
, -name
, *.jav
. find
ищет файлы, имя которых соответствует шаблону *.jav
в любом каталоге в текущем каталоге. При запуске find. -name *.jav
и отсутствии файлов, соответствующих*.jav
:
find
, .
, -name
, *.jav
, где *
не заключено в кавычки. *.jav
содержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла. Поскольку соответствующих имен файлов нет, шаблон остается нераскрытым. find
с полученным списком аргументов: .
, -name
, *.jav
. find
ищет файлы, имя которых соответствует шаблону *.jav
в любом каталоге в текущем каталоге.Когда вы запускаете find. -name *.jav
и текущий каталог содержит file1.jav
, file2.jav
иfile3.jav
:
find
, .
, -name
, *.jav
, где *
не заключено в кавычки. *.jav
содержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла :*.jav
, заменяется списком совпадающих имен файлов. find
с результирующим списком аргументов: .
, -name
, file1.jav
, file2.jav
, file3.jav
. find
жалуется на синтаксическую ошибку, когда достигает file2.jav
. Когда вы запускаете find. -name *.jav
и текущий каталог содержит один соответствующий файлfile.jav
:
find
, .
, -name
, *.jav
, где *
не заключено в кавычки. *.jav
содержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла.:*.jav
заменяется списком совпадающих имен файлов. find
с полученным списком аргументов: .
, -name
, file.jav
. find
видит вполне допустимую команду, но, вероятно, это не то, что вы хотели.:find
сказано искать файлы с именем file.jav
в любом каталоге, а не искать какой-либо файл, соответствующий *.jav
. (Оценка и расширение оболочки имеет множество других функций. Я упомянул только те, которые актуальны здесь.)
(То, что я описываю, является поведением по умолчанию большинства распространенных оболочек :sh, bash, dash, ksh, … Некоторые оболочки могут быть настроены для отображения ошибки вместо запуска команды с нерасширенными подстановочными знаками или для расширения не -сопоставление подстановочных знаков пустому списку.Ни один из них не поможет здесь.)
Rsync не подходит для этого варианта использования. Лучше использовать его при попытке резервного копирования DATA файловых систем, а не самой SYSTEM .
Вместо этого вы можете использовать команду dd :
Остановите размещенные приложения и службы.
Скопируйте весь диск с помощью dd и заархивируйте его.
sudo dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c > <path>/backup_image.gz
Выполнить проверку контрольной суммы в почтовом индексе.
Разархивируйте резервную копию.
Загрузите целевую систему с live CD Установка.
Перенесите zip и файл контрольной суммы используя rsync или scp .
Выполните контрольную сумму для полученного zip-архива и сравните обе контрольные суммы.
Разархивируйте и скопируйте резервный диск на новый:
gunzip -c <path_to_diskX>.gz | dd of=/dev/diskY
О вашем последнем комментарии:
dd выполнить побитовое копирование. Поскольку ваш целевой диск меньше исходного, и вы используете MBR , который находится в первом секторе. Для этого вам необходимо выполнить дополнительные действия.
На исходном диске:
Отключите пространство подкачки .
Измените размер и уменьшите ваши файловые системы только до используемого пространства (+ несколько мегабайт ).
Уменьшить разделы с помощью gparted или другой утилиты (размер должен быть
На целевом диске:
Проверьте раздел с помощью gparted .
Запустите fsck в своих файловых системах.