我使用此 bash 命令下載的 txt 檔案中有太多檔案 url
awk '{url=$1; $1="";{sub(/ /,"");out=url" -O \""$0"\""}; print out}' file.txt | xargs -L 1 wget
上面的這個 bash 命令應該獲取每個檔案的 url 和名稱,然后在使用每個檔案 url 前面列出的原始名稱下載時重命名它們,包含這些 url 和它們各自名稱的 txt 檔案組織如下:
http://example.com/1425233/47188.mp4 Abaixo de Zero (2021).mp4
http://example.com/1425233/47185.mp4 A Sentinela (2021).mp4
http://example.com/1425233/46849.mp4 Eu Me Importo (2021).mp4
http://example.com/1425233/47933.mp4 Loucura de Amor (2021).mp4
干得好,直到此時一切正常,現在的問題是當下載完成時,當我將 ls 命令放入終端時,每個檔案的標題看起來像這樣,所有檔案看起來都是這樣的:
'Abaixo de Zero (2021).mp4'$'\r'
'A Sentinela (2021).mp4'$'\r'
'Eu Me Importo (2021).mp4'$'\r'
'Loucura de Amor (2021).mp4'$'\r'
所以這個問題導致視頻不再播放,但是當我再次手動重命名為 mp4 時,'$'\r' 字串消失并且視頻能夠播放......
話雖如此,我想要一個可以批量重命名所有檔案并洗掉這個'$'\r'字串的linux命令......
然后在終端中列出時,檔案只會是:
'Abaixo de Zero (2021).mp4'
'A Sentinela (2021).mp4'
'Eu Me Importo (2021).mp4'
'Loucura de Amor (2021).mp4'
謝謝,任何幫助將不勝感激。
uj5u.com熱心網友回復:
您可以利用 bash 字串操作并將原始檔案移動到檔案子字串,如下所示:
$ touch normal_file_extra
$ fileVar=normal_file_extra
$ echo ${fileVar::-6}
normal_file
$ mv $fileVar ${fileVar::-6}
# previous command substract 6 chars from the original file
$ ls
normal_file
uj5u.com熱心網友回復:
如果要重命名現有檔案,請嘗試:
#!/bin/bash
for f in *mp4$'\r'; do
mv -- "$f" "${f%$'\r'}"
done
它假定 *mp4 檔案位于同一目錄中。如果要遞回修復當前目錄中的檔案名,請嘗試:
#!/bin/bash
shopt -s globstar
for f in **/*mp4$'\r'; do
mv -- "$f" "${f%$'\r'}"
done
順便說一句,如果您想修復從現在開始下載的檔案名,請將您的awk命令修改為:
awk '{url=$1; $1="";{sub(/ /,""); sub(/\r$/, "");out=url" -O \""$0"\""}; print out}' file.txt | xargs -L 1 wget
它從 in 的名稱中洗掉尾隨 CR 字符,file.txt然后將更正的檔案名傳遞給wget.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/420210.html
標籤:
下一篇:Linux腳本Ftp
