echo $filename
我得到
Pew Pew.mp4
然而,
echo "${#filename}"
返回19
如何刪除所有字符文件擴展名後?它需要工作,無論文件擴展名是什麼,因爲變量中的文件名不會總是匹配* .mp4
echo $filename
我得到
Pew Pew.mp4
然而,
echo "${#filename}"
返回19
如何刪除所有字符文件擴展名後?它需要工作,無論文件擴展名是什麼,因爲變量中的文件名不會總是匹配* .mp4
您應該嘗試在修復它之前找出爲什麼有這些奇怪的文件。 一旦你知道,你可以重命名文件。
當你只是要重命名文件1,只需要使用命令
mv "Pew Pew.mp4"* "Pew Pew.mp4"
切斷主完全擴展(與filename=${filename%%.*}
)不會幫助你,如果你想使用的剝離擴展(MP4或JPG或。 ..)。 編輯: 我認爲OP想要一個解決辦法,所以我給另一個嘗試。 當你有一個擴展的短名單,你可以嘗試
for ext in mpeg mpg jpg avo mov; do
for filename in *.${ext}*; do
mv "${filename%%.*}.${ext}"* "${filename%%.*}.${ext}"
done
done
你可以嘗試strings
獲得可讀的字符串。
echo "${filename}" | strings | wc
# Rename file
mv "${filename}" "$(echo "${filename}"| strings)"
編輯: strings
給出超過1線作爲結果和不希望的空間。由於Pew Pew
裏面有一個空格,我希望所有空格,下劃線和減號位於點的前面。
的NEWNAME可以像
tmpname=$(echo "${filename}"| strings | head -1)
newname=${tmpname% *}
# or another way
newname=$(echo "${filename}"| sed 's/[[:alnum:]_- ]*\.[[:alnum:]]*\).*/\1/')
# or another (the best?) way (hoping that the first unwanted character is not a space)
newname="${filename%%[^[:alnum:]\.-_]*}"
# resulting in
mv "${filename}" "${filename%%[^[:alnum:]\.-_]*}"
感謝您的幫助。 echo「$ {filename}」|字符串返回以下兩行:「Pew Pew.mp4」; 「[23;0噸」。我不知道這些額外的文本來自哪裏,但我試圖創建一個名爲「Pew Pew.mp4.conf」的文件。每次運行這些腳本時,$ filename都會包含我正在下載的另一個文件的名稱,並且我正在爲它們中的每一個製作.conf文件。 – baruch
當你通過'head -1'發送輸出時,你將會擁有Pew Pew。 –
我嘗試過,當我試圖命名它「Pew Pew.mp4.conf」時,我仍然得到了「Pew Pew.mp4 .conf」。任何想法爲什麼這個空間顯示? – baruch
來構建你怎麼知道這些額外的字符文件擴展名的一部分? (如果它們是,你應該把它們扔掉嗎?)無論如何,(1)這個名字中的一些字符實際上是UTF8字符? (請參閱http://stackoverflow.com/a/31009961/2564301),以及(2)如果沒有,最好檢查一下您的硬盤。 – usr2564301
好問題。它們不是名稱中的UTF8字符。當我用$ filename.conf創建一個新文件作爲名稱時,它會生成一個如下所示的文件:Pew Pew.mp4 ?? [23; 0t.conf。我不知道這些角色是什麼,但我不認爲它是我的硬盤。這些是youtube-dl --get-filename返回的文件名稱 – baruch
Ouch - 看起來像一些批量重命名命令跑了一陣子。也許可以用'sed'在第一個非ASCII字符之後剪切掉所有的東西。 – usr2564301