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

find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;

Я пытаюсь скопировать много каталогов из одного каталога в другой, но только те, которые были созданы за последние 2 часа.

Моя команда не работает, и я не понимаю, почему, если не очевидно, я не очень опытный пользователь Linux. Из того, что я получаю, кажется, что cp интерпретирует мое предназначение как источник.

Я даже пытался использовать xargs и это я понимаю даже меньше.

Использование Bash в Debian Squeezy и запуск команды в корне.

1 ответ1

1

Из того, что я получаю, кажется, что cp интерпретирует мое предназначение как источник.

Да, это. Это потому, что общий синтаксис Linux/Unix выглядит примерно так:

[some command] [some command options] [source item] [destination item]

Итак, посмотрите на вашу команду:

find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;

Этот cp -f absolute-destination {} задом наперед, так как {} представляет исходный файл, найденный командой find а «absolute-destination» - именно то, чем он является; пункт назначения. Так что эта часть команды должна быть переписана как cp -f {} absolute-destination .

Дополнительно:

  • -name "*" является избыточным и излишним, если вы все равно ищете все файлы по времени; это означает, что вы можете просто бросить это.
  • Кроме того, использование amin немного сбивает с толку, так как -amin -120 означает «к файлу обращались последние 120 минут». Если вы хотите воздействовать на время создания файлов, вместо этого следует изменить значение на cmin --aka: изменено n минут назад - вместо этого; более подробную информацию можно find странице справки по Linux.

Таким образом, последняя команда будет:

find absolute-path -cmin -120 -exec cp -f {} absolute-destination \;

Но перед запуском этой команды cp вы всегда должны выполнить «пробный запуск» с использованием echo чтобы точно увидеть, что происходит следующим образом:

find absolute-path -cmin -120 -exec echo {} \;

Помните, что выполнение тестового «пробного запуска» такой команды перед выполнением фактической / последней команды избавит вас от головной боли в долгосрочной перспективе. Особенно, если вы планируете запускать команду от имени пользователя root .

Вы никогда не знаете, возможно, вы допустили простую, непреднамеренную ошибку в вашей командной логике, которая может привести к ошибкам. А введение ошибочно структурированной команды в «производство» без тестирования может сперва сэкономить несколько минут, но затем может привести к часам, а в некоторых случаях и дням, работы по очистке. Всегда будьте осторожны при работе в командной строке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .