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