Я новичок в сценарии bash и хочу создать сценарий bash, который перемещает файлы нескольких дней между источником и местом назначения в соответствии с днями, определенными в сценарии.
Когда я запускаю этот скрипт, я получаю ошибку
find: пути должны предшествовать выражению: mv Использование: find [-H] [-L] [-P] [-Olevel] [-D help | tree | поиск | статистика | тарифы | opt | exec] [путь ...] [выражение]
#!/bin/bash
echo "Enter Your Source Directory"
read soure
echo "Enter Your Destination Directory"
read destination
echo "Enter Days"
read days
find $soure -mtime +$days mv $soure $destination {} \;
echo "Files $days old moved from $soure to $destination"
Что отсутствует или не так ???? Пожалуйста, помогите мне создать этот скрипт.
Я думаю, что вам нужно иметь оператор for перед циклом do, чтобы он работал. Смотрите здесь , для получения дополнительной информации о циклах Bash.
Я уверен, что вы уже сталкивались с ними, но лучше всего начать с изучения bash-сценариев: Руководство по Bash для начинающих и Руководство по расширенному Bash-Scripting [ 118]. Если вы еще не видели эти два ресурса, я бы настоятельно рекомендовал добавить их в закладки, если вы хотите заняться дальнейшим сценарием bash.
Удалена часть, касающаяся управления потоком из-за рассматриваемого редактирования. Команде find нужно -exec
перед командой, иначе она не будет знать, что mv
на самом деле является командой, которую вы пытаетесь выполнить с файлами. Кроме того, {}
в поиске используется для ссылки на результаты команды поиска, поэтому вам не понадобится $source
как часть поиска. Команда find, вероятно, будет выглядеть примерно так:
find $source -mtime +$days -exec mv {} $destination \;
Если результаты поиска будут включать файлы / каталоги с пробелами в них, то вам, возможно, потребуется циклически просмотреть результаты (что вернет do / done обратно в смесь), чтобы вы могли включить результаты поиска в переменную, которая затем может быть заключена в кавычки. Это даст структуру, подобную следующей:
for result in $(find $soure -mtime +$days)
do
mv "${result}" $destination
done
Если у вас все еще есть проблемы, я бы предложил включить копию окна вашего терминала при запуске сценария. Также попробуйте запустить только команду find без частей -exec mv...
и заменить переменные тем, что вы обычно вводите для них во время выполнения скрипта. Таким образом, вы можете получить представление о том, что соответствует команда поиска, так что вы можете быть уверены, что она соответствует файлам, которые вам нужны, прежде чем вносить какие-либо изменения в расположение ваших файлов.