使用文件内容重命名文件

使用文件内容重命名文件

所以我已经下载了一堆文本文件并想将这些文件重命名为标题这些文件中包含的内容

的输出head sn-800.txt是:

吉布森研究公司 https://www.GRC.com/

系列:现在安全!
剧集:#800
日期:2021 年 1 月 5 日
标题: 太阳暴雪
主持人:史蒂夫·吉布森和里奥·拉波特
来源:https://media.grc.com/sn/sn-800.mp3
存档:https://www.grc.com/securitynow.htm

简而言之,sn-800.txt应该成为sn-800 - SolarBlizzard.txt

在进入mv335 个文件之前,我会回显屏幕上的所有内容:

#!/bin/bash
for iEpisode in {802..807}; 
do 
  echo -n "sn-$iEpisode - ";
  grep "^TITLE:" sn-"$iEpisode".txt | 
  cut -d":" -f2 | 
  sed 's/\t//g' | 
  tr -d '\n';  
  echo ".txt";  
done

但似乎无法弄清楚如何删除末尾的换行符(上面的`tr),因为这给了我:

.txt02 - Where the Plaintext Is
.txt03 - Comparative Smartphone Security
.txt04 - NAT Slipstreaming 2.0
.txt05 - SCADA Scandal
.txt06 - C.O.M.B.
sn-807 - Dependency Confusion.txt

由于某种或其他原因,最后一个文件是正确的,但之前的文件在某处仍然有换行符??? (如果我-n在最后一个上执行 a echo,所有文件名都会连接到一个字符串)

我究竟做错了什么???

答案1

这些文件有 CR/LF 行结尾,因此您也需要删除\r

...
tr -d '\r\n';
...

这就是为什么出现在每行开头的原因.txt- 它在末尾输出,但在光标返回到行开头之后。

相关内容