[英]Bash rename file based on line printed from another file
我已经从https://www.grc.com/securitynow.htm下载了一系列文件,这是一个播客。 我每个播客下载了2个文件。
文件1名为sn-471.mp3(我依次命名为471)文件2命名为sn-471.txt(我依次命名为471)
我要这样做的是,我正在打印文件的第六行,并从第二个定界符切到此行的末尾:
sed -n 6p sn-471.txt | cut -f2-
现在,这非常正常。 到目前为止,第六行的原因在我的测试中,第六行始终是TITLE:然后是选项卡,然后是剧集的标题。 我假设如果遇到第6行并不总是标题的问题,那么我可以grep代表TITLE:然后使用相同的剪切。
通过以上操作,我可以打印剧集的标题。 我正在尝试做的并且似乎无法解决的问题是使用此数据来重命名mp3文件。
到目前为止,我已经提出了这个建议,但是它没有用。
#/bin/bash
for i in
sn-471.txt;
do
X=$(sed -n 6p $i | cut -f2-)
mv $i `${X}`.txt
done
我知道我很快将需要使“ sn-471.txt”部分类似于“ sn-*。txt”,但是对于此测试,这是我一直在使用的。 如果已经解决了这个问题,那么到目前为止,我还无法通过各种Google搜索找到它。
感谢您提供的任何帮助!
您可以使用命令替换将sed
命令的输出存储到变量中。 然后,您可以使用参数扩展来删除“ .txt”扩展名:
for file in sn-*.txt ; do
title=$( sed -n 6p "$file" | cut -f2- )
mv "${file%txt}"mp3 "$title".mp3
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.