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

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

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

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

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

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

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

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

решение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командой, а «абсолютное-назначение» — это именно то, чем оно является; назначение. Так что эту часть команды следует переписать как cp -f {} absolute-destination.

Кроме того:

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

Итак, окончательная команда будет такой:

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

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

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

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

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

Связанный контент