2013-11-14 4 views
0

я это найтиНайти и копировать, переименовывать файлы с таким же именем

find "$source_folder" -name "IMG_[0-9][0-9][0-9][0-9].JPG" -exec cp {} $destination_folder \; 

я хочу только IMG_ [0-9] [0-9] [0-9] [0-9] .JPG , в исходной папке есть разные файлы с одинаковым именем и одинаковые файлы с тем же именем, как я могу скопировать все и переименовать все одинаковые файлы имен с помощью дополнительного .JPG без удаления каких-либо уникальных файлов? PS: noob, пожалуйста, не могли бы вы объяснить, поэтому я могу попробовать и узнать

+0

Не уверен, что 'поиск' до этого ... может быть, вам лучше с помощью скрипта python. –

+0

Возможный дубликат http://stackoverflow.com/questions/19961306/have-one-folder-with-files-that-have-the-same-name-but-different-file/19961492#19961492 – damienfrancois

ответ

0

Я буду считать, что ваши имена файлов не содержат пробелов. Это облегчает ситуацию.

Вы можете передать вывод команды 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 
Смежные вопросы