Что значит \;
значит в следующей команде? Я также не уверен, что означает {}
. Есть \;
действительно необходимо?
find ./ -name file_1 -exec cp {} ./ \;
Что значит \;
значит в следующей команде? Я также не уверен, что означает {}
. Есть \;
действительно необходимо?
find ./ -name file_1 -exec cp {} ./ \;
В вашем примере \;
является частью команды поиска. (см. человек 1 найти). То же самое верно для {}
.
Эта точная команда гласит:
./
)file_1
cp {} ./
В результате все файлы и каталоги с именем file_1 будут скопированы в ваш текущий каталог. (и они могут быть перезаписаны, если существует несколько файлов или папок с таким именем)
Так много для общего объяснения. Теперь подробности:
Команда, которая будет выполняться для каждого найденного элемента : cp full_path_to_item./
Это содержимое между -exec и ;
Однако точка с запятой - это особый символ в bash. Если мы не сделаем с этим ничего особенного, то оболочка его съест. Таким образом, мы избежим этого с обратной косой чертой. Это говорит оболочке оставить это в покое и передать это, чтобы найти.
Обратите внимание, что вам нужно будет сделать это для всех специальных символов. Например, вы не можете просто использовать звездочку в имени файла (так что не найти. -Type f -name * .mp3 ....)
Причина того, что точку с запятой нужно экранировать, заключается в том, что она будет интерпретироваться оболочкой, а не командой find
если она не экранирована. find
ожидает увидеть это в своей командной строке, поэтому обратная косая черта говорит оболочке игнорировать ее и передавать ее для find
. Очень важно find
точку с запятой, иначе она выдаст ошибку.
{}
также интерпретируется с помощью find
. Это заполнитель вы положили в команде , которую вы хотите запустить, и каждый файл find
находит, он заменит эти два кронштейн с именем файла и запустить команду.
В вашем примере, если он нашел file_1, будет выполнена следующая команда:
cp file_1 ./
{} \; имеет не столько отношение к оболочке, сколько к аргументам, которые команда find ожидает от подкоманды -exec. {} Заменяется текущим именем файла, например, это приводит к тому, что find выполняет команду ls -d FILENAME с заменой FILENAME на каждый найденный файл. \; служит терминатором аргумента -exec. См. Справочную страницу поиска, например, введите man find в оболочке linux и найдите там строку -exec, чтобы найти описание.