Я использую следующую команду, чтобы очистить каталог файлов и каталогов более чем 30 дней, и переместить их в каталог архива, который я могу удалить после нескольких недель, если никто не просит их файлы назад. Целевой каталог имеет подкаталоги именем пользователя, каталог архива - также.
Это - команда, которую я использую:
find /path/to/directory/username/ -mtime +30 -exec mv "{}" /path/to/archive/username/ \;
Я предложил, чтобы измененная версия этого для ответа на вопрос на спросила человечность, другой пользователь отредактировал код для изменения конца строки \;
для +
поскольку это быстрее (и более корректно?). Посмотрите здесь
Однако использование +
таким образом работы, если -exec
команда ls -lh
но не в фактической команде, которую я использую. Если я пробую его +
Я получаю сообщение об ошибке:
find: missing argument to '-exec'
Я не понимаю, почему это ведет себя этот путь, или какова корректная команда была бы. Только отправьте исправление команды, я хотел бы понять, а не просто следовать за предложением вслепую.
Пользователь в том сообщении может, сказал, что эти +
знак в конце -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'
в Вашем примере; это пропускает закрытие {}
.
Пользователь объяснил их редактирование....
... использование этой ссылки. Я думаю в основном вместо того, чтобы использовать несколько команд, это отправляет все имена файлов в один экземпляр команды, для ускорения вещей. Вот пример отсюда:
Используя - должностное лицо с точкой с запятой (
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
без дополнительных опций и т.д., поскольку они могут понять, когда несколько имен файлов даны. +
возможно, также должен быть оставлен (т.е. \+
)