如何根据CSV文件批量重命名文件(图像)

如何根据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)。

有一些答案,例如:

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 

相关内容