用文件内容重命名文件

Fab*_*bby 2 bash tr newlines

所以我下载了一堆文本文件,并想将这些文件重命名为包含在这些文件中的标题。

的输出head sn-800.txt是:

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

系列:现在安全!
剧集:#800
日期:2021 年 1 月 5 日
标题:太阳能暴雪
主持人:Steve Gibson & Leo Laporte
来源: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
Run Code Online (Sandbox Code Playgroud)

但似乎无法弄清楚如何删除最后的换行符(上面的`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
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么???

Ste*_*itt 7

这些文件有 CR/LF 行结尾,所以你也需要删除\r

...
tr -d '\r\n';
...
Run Code Online (Sandbox Code Playgroud)

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