Что значит \; значит в следующей команде? Я также не уверен, что означает {} . Есть \; действительно необходимо?
find ./ -name file_1 -exec cp {} ./ \;
Что значит \; значит в следующей команде? Я также не уверен, что означает {} . Есть \; действительно необходимо?
find ./ -name file_1 -exec cp {} ./ \;
В вашем примере \; является частью команды поиска. (см. человек 1 найти). То же самое верно для {} .
Эта точная команда гласит:
./)file_1cp {} ./В результате все файлы и каталоги с именем 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, чтобы найти описание.