使用列表重命名文件

use*_*306 6 rename files

我在目录中有可用的文件:

filename15_1
filename15_2
filename15_3
filename15_4
Run Code Online (Sandbox Code Playgroud)

等等。

我有另一个文件,其中包含有关如何重命名文件的映射信息。这是一个 CSV 文件。

filename15_1,filename30_6
filename15_2,filename30_7
filename15_3,filename60_3
filename15_4,filename60_4
filename15_5,filename60_5
filename15_6,filename60_6
Run Code Online (Sandbox Code Playgroud)

我想通过阅读上面的映射来重命名四个文件。映射文件比目录中存在的实际文件具有更多信息。

我的文件应重命名为以下内​​容。

filename30_6
filename30_7
filename60_3
filename60_4
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

注意:我是一个数据库背景的人,对 Unix 知之甚少。

ter*_*don 8

如果您的映射文件是逗号分隔的,您可以这样做:

while IFS=, read orig target; do
    mv "$orig" "$target"
done < mapping.txt
Run Code Online (Sandbox Code Playgroud)


use*_*552 6

一个可读的、简洁的方法是awk's systemfunction

awk -F',' 'system("mv " $1 " " $2)' mappingFile.csv
Run Code Online (Sandbox Code Playgroud)

将为输入文件的每一行运行一个命令


命令概要

  • awk 一个非常适合处理表格数据的unix util
  • -F','F字段分隔符”是一个逗号
  • system("mv " $1 " " $2) 为输入文件的每一行运行
    • system(x) 在子shell中运行x
    • $1并分别$2参考第一列和第二列
    • "mv " $1 " " $2 隐式连接构建命令
  • mappingFile.csv 使用这个输入文件


Sob*_*que 5

嗯,一个相当愚蠢的答案,但是:

sed -e 's/^/mv /' -e 's/,/ /' $mapping_file | sh 
Run Code Online (Sandbox Code Playgroud)