使用文件列表重命名多个文件
Renaming multiple files using list of files
在 bash 如何使用文本文件中的名称重命名多个文件,我有一个包含多个 .mp3 文件的目录:1.mp3. 2.mp3, 3.mp3, 4.mp3
等等...
和一个文本文件:names.txt 包含:
song1.mp3
song2.mp3
song3.mp3
等..
文本文件中的第一行对应文件的第一行,第二行对应第二行等等。我在python中找到了一些方法,但我想学习如何在 bash 中完成此操作,提前致谢!
如果您目录中的文件有名称,如 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
粘贴命令结合了旧文件名和新文件名,用制表符将它们分开:
$ printf "%s\n" *.mp3 | paste - file2
1.mp3 song1.mp3
2.mp3 song2.mp3
3.mp3 song3.mp3
读取命令 IFS=$'\t' read -r old new
将旧文件名和新文件名读入 shell 变量 old
和 new
.
mv 命令,mv "$old" "$new"
,重命名文件。
多行版本
如果您喜欢将代码分布在多行中:
printf "%s\n" *.mp3 | paste - file | while IFS=$'\t' read -r old new
do
mv "$old" "$new"
done
在 bash 如何使用文本文件中的名称重命名多个文件,我有一个包含多个 .mp3 文件的目录:1.mp3. 2.mp3, 3.mp3, 4.mp3
等等...
和一个文本文件:names.txt 包含:
song1.mp3
song2.mp3
song3.mp3
等..
文本文件中的第一行对应文件的第一行,第二行对应第二行等等。我在python中找到了一些方法,但我想学习如何在 bash 中完成此操作,提前致谢!
如果您目录中的文件有名称,如 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
粘贴命令结合了旧文件名和新文件名,用制表符将它们分开:
$ printf "%s\n" *.mp3 | paste - file2
1.mp3 song1.mp3
2.mp3 song2.mp3
3.mp3 song3.mp3
读取命令 IFS=$'\t' read -r old new
将旧文件名和新文件名读入 shell 变量 old
和 new
.
mv 命令,mv "$old" "$new"
,重命名文件。
多行版本
如果您喜欢将代码分布在多行中:
printf "%s\n" *.mp3 | paste - file | while IFS=$'\t' read -r old new
do
mv "$old" "$new"
done