Что у меня есть и чего я хочу достичь:
В одной папке тысячи изображений.
У меня есть файл CSV со следующими столбцами:
A: исходное имя B: переименованное имя
Типичная строка выглядит следующим образом:
"original-1.jpg","renamed-1.jpg"
"original-2.jpg","renamed-2.jpg"
Я могу удалить цитаты, это не проблема.
Теперь я хочу использовать приложение или запустить скрипт, который будет искать все изображения в столбце 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 /
Однако, есть некоторые сценарии, и я не уверен, влияют ли все эти сценарии только на Папка, в которой вы храните сценарий или они могут переименовать все файлы на диске, которые удовлетворяют определенным условиям. Конечно, последнего следует избегать.
Что я ищу, так это простое руководство, как переименовывать файлы и как выбрать папку с файлами.
Спасибо заранее.
Это должно работать на Вас:
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