繁体   English   中英

Bash重命名文件基于从另一个文件打印的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM