拥有数据和*.tsv
描述数据的文件。想要使用描述并相应地重命名数据。
请看一看 :
awk
过滤 tsv 的命令如下:common_voice_en_22090684.mp3 four common_voice_en_22090691.mp3 no common_voice_en_22090696.mp3 one
浏览以下目录
*.mp3
:for i in *.mp3 ; do echo $i
mv
是重命名文件的命令,它需要两个参数(要更改的文件以及更改内容)
如何使用awk
(读取和使用描述)和mv
(使用传递的描述重命名现有文件?因此,查看上面的示例,结果将是:
four.mp3
no.mp3
one.mp3
使用建议的命令并不重要。任何关于如何做到这一点的想法、建议都是非常受欢迎的!
答案1
这不满足您的要求,但如果您希望处理许多文件,则通过使用 .tsv 作为驱动程序而不是 shell 扩展可能会获得更好的性能,因为您不会为每个 mp3 打开一次 tsv。echo
如果它看起来能达到您的预期,请将其删除。
$ while read -r src tgt; do [ -f "$src" ] && echo mv -i "$src" "$tgt.mp3"; done < file.tsv
答案2
IIUC,在保存输出后你想要这样的东西awk 命令过滤 tsv在文件中:
#!/usr/bin/env sh
for i in *.mp3
do
new_name="$(awk -v name="$i" '$1 == name {print $2}' file)"
if [ -n "$new_name" ]
then
echo mv -- "$i" "$new_name"
fi
done
删除echo
以实际执行重命名,但首先运行它以确保它符合您的需要。另请注意,失败的可能性很小,mv
因为当脚本执行到达该行时原始文件将已经被删除 - 您可以set -e
在第一次mv
失败后立即退出。