2014-01-30 4 views
1

Мне нужно переименовать более 1500 файлов * .jpg. У меня есть текстовый файл со списком имен файлов и 2 колонки, вкладка разделены:Переименование пакетных файлов с использованием списка имен файлов

  • +1310 173

Старые имена файлов - новые имена файлов

  • 1305_1.jpg - 1979
  • 1310_main_origin.jpg - 1 73
  • 1311_2.jpg - 172

Как я могу проверить первые 4 цифры из первого столбца и старого файла и переименовать еще 4 цифр от 2 колонки?

// извините за мой английский

+0

Я не понимаю: это файлы только '1305' или' 1305_01.jpg' ...? Значит, выберет 'mv col1 col2'? – fedorqui

+0

мои старые имена файлов имеют разные окончания после 1305, 1310, 1311 и т. Д. Мне нужно переименовать его в имена из 2 столбцов. – RSH

+0

Является ли это средой Windows или Unix? – Graeme

ответ

4

использовать цикл, как показано ниже:

while read -r old new 
do 
    arr=(${old}_*.jpg) 
    if ((${#arr[@]} == 1)) 
    then 
     mv "${arr[0]}" "$new.jpg" 
    else 
     echo "Error: Multiple files found for $old: ${arr[@]}" 
    fi  
done < file 

Обратите внимание, что существует проверка безопасности, чтобы убедиться, что у вас нет нескольких файлов с одним и тем же префиксом. Например, если у вас есть 1305_1.jpg и 1305_2.jpg, вы не можете переименовать их оба в 1979.jpg, поэтому скрипт выведет ошибку.

2

Попробуйте это, и удалить эхо после проверить это, что вы хотите. changefile это имя файла, который содержит изменения

while read from to; do 
    echo "mv ${from}* $to" 
done < changefile 

Вы должны обратного changefile чтобы гарантировать, что 1306 наносится до 130 и до того, чем 13

Смежные вопросы