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

Что у меня есть и чего я хочу достичь:

  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. ).

Есть несколько ответов, е. g.:

http://ubuntuforums.org/showthread.php?t=1069652

http://systembash.com/content/one -line-batch-rename-files-using-csv-input-file-and-awk /

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

Что я ищу, так это простое руководство, как переименовывать файлы и как выбрать папку с файлами.

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

11
задан 24 March 2014 в 18:47

1 ответ

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

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 
12
ответ дан 24 March 2014 в 18:47

Другие вопросы по тегам:

Похожие вопросы: