Bash

用文件內容重命名文件

  • March 2, 2021

因此,我下載了一堆文本文件,並希望將這些文件重命名為這些文件中包含的標題。

的輸出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

mv在處理335 個文件之前,我會在螢幕上顯示所有內容:

#!/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在最後一個echo,所有文件名都連接到一個字元串)

我究竟做錯了什麼???

這些文件有 CR/LF 行結尾,所以你也需要刪除\r

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

這就是為什麼.txt出現在每行的開頭的原因——它在結尾處輸出,但是在游標回到行首之後。

引用自:https://unix.stackexchange.com/questions/637158