Bash
用文件內容重命名文件
因此,我下載了一堆文本文件,並希望將這些文件重命名為這些文件中包含的標題。
的輸出
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
出現在每行的開頭的原因——它在結尾處輸出,但是在游標回到行首之後。