Как переименовать файлы (изображения) на основе CSV-файла

9

То, что я хочу и хочу достичь:

  1. В одной папке есть тысячи изображений.

  2. У меня есть файл CSV со следующими столбцами:

    A: оригинальное название B: переименованное имя

    Типичная строка выглядит следующим образом:

    "original-1.jpg","renamed-1.jpg"  
    "original-2.jpg","renamed-2.jpg"
    

    Я могу удалить кавычки, это не проблема.

  3. Теперь я хочу использовать приложение или запустить скрипт, который будет искать все изображения в столбце A и переименовать их в имена в столбце B (например, original-1.jpg - > renamed-1. JPG).

Есть несколько ответов, например. г:.

Ссылка

Ссылка

Однако есть некоторые сценарии, и я не уверен, что все эти сценарии затрагивают только папку, в которой вы храните скрипт, или они могут переименовывать все файлы на диске, которые удовлетворяют определенным условиям. Конечно, последнего следует избегать.

Я ищу простое руководство по переименованию файлов и выбору папки с файлами.

Спасибо заранее.

    
задан take2 24.03.2014 в 14:41
источник

1 ответ

10

Это должно сработать для вас:

sed 's/"//g' files.csv | while IFS=, read orig new; do mv "$orig" "$new"; done 

Объяснение:

  • sed 's/"//g' files.csv : удалить кавычки
  • IFS=, : разделить вход на ,
  • while read orig new; do ... done : это будет читать каждую строку ввода, разделить ее на значение $IFS (здесь запятая) и сохранить 1-е поле как $orig , а остальное как $new .
  • mv "$orig" "$new" : это приведет к переименованию файлов в соответствии с запросом.

Если ваш файл содержит только имена файлов (например, orig.jpg ) и не содержит путей (не /home/take2/orig.jpg или подобных), приведенная выше команда будет влиять только на файлы в вашем текущем каталоге. Таким образом, вам нужно открыть терминал, cd в целевой каталог и запустить его там.

Сначала проверьте:

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

sed 's/"//g' files.csv | while IFS=, read orig new; do echo mv "$orig" "$new"; done 
    
ответ дан terdon 24.03.2014 в 14:59
источник