使用文件列表重命名多个文件

占有

在bash中,我将如何使用文本文件中的名称重命名多个文件,我的目录中包含多个.mp3文件:1.mp3. 2.mp3, 3.mp3, 4.mp3etc ...,以及文本文件:names.txt with: song1.mp3 song2.mp3 song3.mp3等。

文本文件中的第一行将与文件的第一行相对应,第二行与第二行相对应,依此类推。进步!

约翰1024

如果目录中的文件具有1.mp3不包含制表符或换行符的名称(如),则可以使用以下命令:

printf "%s\n" *.mp3 | paste - file | while IFS=$'\t' read -r old new; do mv "$old" "$new"; done

即使在新文件名中包含空格的情况下,此命令也将起作用Joe's "favorite" song.mp3

怎么运行的

printf语句写入每个mp3文件名,每行一个:

$ printf "%s\n" *.mp3
1.mp3
2.mp3
3.mp3

paste命令将旧文件名和新文件名结合在一起,并用制表符将它们分开:

$ printf "%s\n" *.mp3 | paste - file2
1.mp3   song1.mp3
2.mp3   song2.mp3
3.mp3   song3.mp3

read命令IFS=$'\t' read -r old new将旧文件名和新文件名读入shell变量oldand中new

mv命令,mv "$old" "$new"重命名文件。

多行版本

如果您喜欢将代码分布在多行中,请执行以下操作:

printf "%s\n" *.mp3 | paste - file | while IFS=$'\t' read -r old new
do
    mv "$old" "$new"
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章