Я буду считать, что ваши имена файлов не содержат пробелов. Это облегчает ситуацию.
Вы можете передать вывод команды find в цикл, где вы можете запустить некоторые тесты, хотите ли вы скопировать файл.
Мне нужно определить имя файла и где оно скопировано. Для этого мне нужно снять $source_folder
с именем найденного файла и добавить имя $dest_folder
. Здесь я хочу скопировать файл.
Ваши указания немного сбивают с толку. Я предполагаю, что вы делаете копию, если $dest_file
не существует или отличается от источника. Как только я определяю, что это файл, который вы хотите скопировать, я должен убедиться, что каталог назначения существует, и если это не так, я его создаю. Теперь я могу сделать свою копию.
У меня есть два echo
заявления здесь. Таким образом, вы можете сделать сухой пробег этого скрипта, чтобы убедиться, что он делает то, что вы хотите. Если он выглядит хорошо, вы можете удалить команды echo
из двух строк и повторить сценарий.
find "$source_folder" -name "IMG_[0-9][0-9][0-9][0-9].JPG" | while read file_name
do
rootname=${file_name#$source_folder/} # Removes the source folder from the name
dest_name="${dest_folder}/$rootname"
if [ ! -e "$dest_name" ] || [ ! diff "$file_name" "$dest_name" > /dev/null 2>&1 ]
then
$dest_folder=$(basename $dest_name)
[ ! -d "$dest_folder" ] && echo mkdir -p "$dest_folder" #Remove echo if it works
echo cp "$file_name" "$dest_name" #Remove 'echo' if it works
fi
done
Не уверен, что 'поиск' до этого ... может быть, вам лучше с помощью скрипта python. –
Возможный дубликат http://stackoverflow.com/questions/19961306/have-one-folder-with-files-that-have-the-same-name-but-different-file/19961492#19961492 – damienfrancois