我在目录中有可用的文件:
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 知之甚少。
如果您的映射文件是逗号分隔的,您可以这样做:
while IFS=, read orig target; do
mv "$orig" "$target"
done < mapping.txt
Run Code Online (Sandbox Code Playgroud)
一个可读的、简洁的方法是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 使用这个输入文件嗯,一个相当愚蠢的答案,但是:
sed -e 's/^/mv /' -e 's/,/ /' $mapping_file | sh
Run Code Online (Sandbox Code Playgroud)