我所拥有的以及想要实现的目标:
一个文件夹中有数千张图像。
我有一个包含以下列的 CSV 文件:
A:原名称 B:更名后的名称
典型的行如下所示:
"original-1.jpg","renamed-1.jpg" "original-2.jpg","renamed-2.jpg"
我可以删除引号,这没问题。
现在我想使用一个应用程序或运行一个脚本,它将搜索 A 列中的所有图像并将它们重命名为 B 列中的名称(例如 original-1.jpg -> renamed-1.jpg)。
有一些答案,例如:
http://ubuntuforums.org/showthread.php?t=1069652
http://systembash.com/content/one-line-batch-rename-files-using-csv-input-file-and-awk/
但是,这涉及到一些脚本,我不确定所有这些脚本是否只影响存储脚本的文件夹,或者它们可以重命名磁盘上满足某些条件的所有文件。当然,后者需要避免。
我正在寻找一个简单的指南,关于如何重命名文件以及如何选择包含文件的文件夹。
先感谢您。
答案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
(这里是逗号)进行拆分,并将第一个字段保存为,$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