Пакетные файлы переименовываются с использованием списка имен файлов

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

  • 1305 1979
  • 1310 173
  • 1311 172

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

  • 1305_1.jpg - 1979 г.
  • 1310_main_origin.jpg - 173
  • 1311_2.jpg - 172

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

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


person RSH    schedule 30.01.2014    source источник
comment
Я не понимаю: файлы просто 1305 или 1305_01.jpg...? В смысле, выживет ли mv col1 col2?   -  person fedorqui 'SO stop harming'    schedule 30.01.2014
comment
мои старые имена файлов имеют разные окончания после 1305, 1310, 1311 и т. д. мне нужно переименовать их в имена из 2 столбца.   -  person RSH    schedule 30.01.2014
comment
Это среда Windows или Unix?   -  person Graeme    schedule 30.01.2014


Ответы (3)


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

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, поэтому скрипт выдаст ошибку.

person dogbane    schedule 30.01.2014

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

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

Вы должны изменить порядок файлов изменений в обратном порядке, чтобы убедиться, что 1306 применяется ДО 130 и ДО 13.

person Raul Andres    schedule 30.01.2014

Я уже публиковал этот ответ на другой вопрос, но этот показался более подходящим с точки зрения вопроса, ключевых слов и сложности, я тоже добавлю его сюда.

Вы можете использовать маленькое имя приложения linux krename с включенным плагином javascript. Это бесплатный инструмент с очень мощными возможностями переименования.

  1. Установите Krename и откройте его.
  2. Добавить файлы
  3. Перейдите на вкладку плагинов и добавьте свою функцию javascript в раздел определений функций, примерно так:

    var files = [
        "Mickey",
        "Donald",
        "Duffy"
    ];
    
    function rename(){
      // krename_index is one of many special variables which can be added via ui
      return files[krename_index];
    }
    

Это простой сценарий, который выполняет свою работу, но он может быть настолько сложным, насколько вам нравится.

  1. Перейдите на вкладку имени файла и вызовите свою функцию во входных данных шаблона, как показано ниже:

    [js; rename()]

Вы можете добавить к приведенному выше коду префикс $, чтобы сохранить исходное имя файла и добавить к нему. Вы можете использовать кнопку «Функции», чтобы поэкспериментировать дальше.

  1. Предварительно просмотрите новые имена и завершите переименование, нажав кнопку «Готово».
person snnsnn    schedule 16.05.2019