Что недостающий аргумент к - должностное лицо?

Я использую следующую команду, чтобы очистить каталог файлов и каталогов более чем 30 дней, и переместить их в каталог архива, который я могу удалить после нескольких недель, если никто не просит их файлы назад. Целевой каталог имеет подкаталоги именем пользователя, каталог архива - также.

Это - команда, которую я использую:

find /path/to/directory/username/ -mtime +30 -exec mv "{}" /path/to/archive/username/ \;

Я предложил, чтобы измененная версия этого для ответа на вопрос на спросила человечность, другой пользователь отредактировал код для изменения конца строки \; для + поскольку это быстрее (и более корректно?). Посмотрите здесь

Однако использование + таким образом работы, если -exec команда ls -lh но не в фактической команде, которую я использую. Если я пробую его + Я получаю сообщение об ошибке:

find: missing argument to '-exec'

Я не понимаю, почему это ведет себя этот путь, или какова корректная команда была бы. Только отправьте исправление команды, я хотел бы понять, а не просто следовать за предложением вслепую.

15
задан 13 April 2017 в 05:23

2 ответа

Пользователь в том сообщении может, сказал, что эти + знак в конце -exec команда быстрее, но не почему.

Позволяет, принимают find возврат команды следующие файлы:

/path/to/file1
/path/to/file2
/path/to/file3

нормальное -exec команда (-exec command {} \;) работает однажды за каждым файлом соответствия. Например:

find ... -exec mv {} /target/ \;

Выполняется:

mv /path/to/file1 /target/
mv /path/to/file2 /target/
mv /path/to/file3 /target/

, Если Вы используете + знак (-exec command {} +), команда является сборкой путем добавления нескольких подобранных файлов в конце команды. Например:

find ... -exec mv -t /target/ {} +

Выполняется:

mv -t /target/ /path/to/file1 /path/to/file2 /path/to/file3

Для использования эти + флаг правильно аргумент процессу должен быть в конце команды, не в середине. Вот почему find плоскодонки missing argument to '-exec' в Вашем примере; это пропускает закрытие {}.

19
ответ дан 23 November 2019 в 02:42

Пользователь объяснил их редактирование....

'+' exec's terminator is faster than '\;' see https://askubuntu.com/questions/558817/what-is-the-difference-between-using-and-in-exec-command; and creating a backup file from original file is good idea

... использование этой ссылки. Я думаю в основном вместо того, чтобы использовать несколько команд, это отправляет все имена файлов в один экземпляр команды, для ускорения вещей. Вот пример отсюда:

Используя - должностное лицо с точкой с запятой (find . -exec ls '{}' \;), выполнится

ls file1
ls file2
ls file3

Но если Вы используете знак "плюс" вместо этого (find . -exec ls '{}' \+), все имена файлов будут переданы как аргументы единственной команде:

ls file1 file2 file3

Существуют другие формы доступное использование ; и + также (отсюда:)

Поэтому следующий синтаксис в качестве примера допускается, находят команду:

find . -exec echo {} \;
find . -exec echo {} ';'
find . -exec echo {} ";"
find . -exec echo {} \+
find . -exec echo {} +

ОДНАКО я не уверен, что это будет работать с командой перемещения так или иначе, поскольку это - синтаксис, mv [OPTION]... SOURCE DEST, если -t опция или подобный используется. Однако это должно работать с ls без дополнительных опций и т.д., поскольку они могут понять, когда несколько имен файлов даны. + возможно, также должен быть оставлен (т.е. \+)

10
ответ дан 23 November 2019 в 02:42

Другие вопросы по тегам:

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