Bash根据从另一个文件打印的行重命名文件

Bash根据从另一个文件打印的行重命名文件,bash,for-loop,sed,cut,Bash,For Loop,Sed,Cut,我下载了一系列文件,其中有一个播客。我每个播客下载2个文件 文件1名为sn-471.mp3(我按顺序命名了其中的471个文件) 文件2名为sn-471.txt(我按顺序命名了其中的471个文件) 我要做的是打印文件的第6行,并用以下命令从第2个分隔符剪切到行尾: sed -n 6p sn-471.txt | cut -f2- 这是完美的工作现在。第六行的原因是到目前为止在我的测试中,第六行总是标题:然后是标签,然后是插曲的标题。我假设,如果我遇到第六行不总是标题的问题,那么我可以grep为标题

我下载了一系列文件,其中有一个播客。我每个播客下载2个文件

文件1名为sn-471.mp3(我按顺序命名了其中的471个文件) 文件2名为sn-471.txt(我按顺序命名了其中的471个文件)

我要做的是打印文件的第6行,并用以下命令从第2个分隔符剪切到行尾:

sed -n 6p sn-471.txt | cut -f2-
这是完美的工作现在。第六行的原因是到目前为止在我的测试中,第六行总是标题:然后是标签,然后是插曲的标题。我假设,如果我遇到第六行不总是标题的问题,那么我可以grep为标题:然后使用相同的剪切

有了上面的内容,我就可以打印这一集的标题了。我想做的是,用这些数据来重新命名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”的部分,但对于这个测试,我一直在使用这一部分。如果这已经被涵盖,我还没有能够找到它迄今为止通过各种谷歌搜索


谢谢你们提供的一切帮助

您可以使用命令替换将
sed
命令的输出存储到变量中。然后可以使用参数扩展来删除“.txt”扩展名:

for file in sn-*.txt ; do
    title=$( sed -n 6p "$file" | cut -f2- )
    mv "${file%txt}"mp3 "$title".mp3
done

太棒了,这是一个很好的进一步,然后我是上面。新问题是,在文件名的开头和结尾添加。知道为什么吗?例如,471的标题是:PGP:升级时间?我刚刚创建的文件名是?PGP:升级时间到了???.mp3非常感谢您的帮助@MaSammich:在
xxd
下检查
是否与
相同。这似乎是一个编码问题。