如何基于CSV文件批量重命名文件(图像)

tak*_*ke2 12 scripts batch-rename csv

我拥有并想要实现的目标:

  1. 一个文件夹中有数千张图片。

  2. 我有一个包含以下列的 CSV 文件:

    A:原名 B:改名

    典型的行如下所示:

    "original-1.jpg","renamed-1.jpg"  
    "original-2.jpg","renamed-2.jpg"
    
    Run Code Online (Sandbox Code Playgroud)

    我可以删除引号,这不是问题。

  3. 现在我想使用一个应用程序或运行一个脚本来搜索 A 列中的所有图像并将它们重命名为 B 列中的名称(例如 original-1.jpg ->重命名-1.jpg)。

周围有一些答案,例如:

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

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

但是,涉及到一些脚本,我不确定所有这些脚本是否只影响您存储脚本的文件夹,或者它们是否可以重命名磁盘上满足某些条件的所有文件。当然,后者需要避免。

我正在寻找的是如何重命名文件以及如何选择包含文件的文件夹的简单指南。

先感谢您。

ter*_*don 14

这应该适合你:

sed 's/"//g' files.csv | while IFS=, read orig new; do mv "$orig" "$new"; done 
Run Code Online (Sandbox Code Playgroud)

解释:

  • 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 
Run Code Online (Sandbox Code Playgroud)