Linux Bash: перемещение / копирование файлов / каталогов по метке времени


0

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

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

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

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

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

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

Ответы:


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 минут». Если вы хотите воздействовать на время создания файлов, вместо этого следует заменить cminyaka на «-: изменено nнесколько минут назад»; более подробная информация на findстранице руководства Linux .

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

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.