Ошибка при запуске скрипта bash, который перемещает файлы

Я новичок в сценарии 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"

Что отсутствует или не так ???? Пожалуйста, помогите мне создать этот скрипт.

0
задан 20 December 2012 в 15:15

2 ответа

Я думаю, что вам нужно иметь оператор for перед циклом do, чтобы он работал. Смотрите здесь , для получения дополнительной информации о циклах Bash.

0
ответ дан 20 December 2012 в 15:15

Я уверен, что вы уже сталкивались с ними, но лучше всего начать с изучения 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... и заменить переменные тем, что вы обычно вводите для них во время выполнения скрипта. Таким образом, вы можете получить представление о том, что соответствует команда поиска, так что вы можете быть уверены, что она соответствует файлам, которые вам нужны, прежде чем вносить какие-либо изменения в расположение ваших файлов.

0
ответ дан 20 December 2012 в 15:15

Другие вопросы по тегам:

Похожие вопросы: