我正在編寫一個腳本,它將按擴展名對文件進行排序。我知道一個按文件名進行操作的方法。問題是,相同的文件名稱中沒有擴展名。例如,如果我有文件:file.txt
,通過簡單的extension="${filename##*.}"
獲得擴展名沒有問題。但是,如果文件名只是filename
,此方法不起作用。是否有任何其他選項來獲取文件的擴展名並將其放到Bash腳本中的變量中?Bash - 獲取文件的擴展
1
A
回答
0
看來你只問如何把一個文件名的文件擴展名到一個變量在bash ,而你並沒有問及分揀部分。 爲此,以下簡短腳本可以從文件列表中打印每個文件的擴展名。
#!/bin/sh
filesInCurrentDir=`ls`
for file in $filesInCurrentDir; do
extention=`sed 's/^\w\+.//' <<< "$file"`
echo "the extention for $file is: "$extention #for debugging
done
包含當前分析文件擴展名的變量名爲extention
。命令sed 's/^\w\+.//
匹配任意長度的字符,直到找到文件名中的第一個點,然後將其刪除。因此,如果存在多個文件擴展名,則這些全部列出(例如,file.txt
->獲得延伸txt
,但是file.odt.pdf
->獲得延伸odt.pdf
)。
例
當前文件夾的內容(可以是文件的任何空間分隔的列表,你喂的循環)以上腳本的
aaab.png
abra
anme2.jpg
cadabra
file
file.png
file.txt
loacker.png
myText
name.pdf
rusty.jgp
結果:
the extention of aaab.png is: png
the extention of abra is:
the extention of anme2.jpg is: jpg
the extention of cadabra is:
the extention of file is:
the extention of file.png is: png
the extention of file.txt is: txt
the extention of loacker.png is: png
the extention of myText is:
the extention of name.pdf is: pdf
the extention of rusty.jgp is: jgp
在這樣,沒有擴展名的文件將導致擴展變量爲空。
1
filename="file.txt"
ext="${filename##*.}"
if [[ "$ext" != "$filename" ]]; then echo "$ext"; else echo "no extension"; fi
輸出:
txt
filename="file"
ext="${filename##*.}"
if [[ "$ext" != "$filename" ]]; then echo "$ext"; else echo "no extension"; fi
輸出:
no extension
+0
但問題是,名稱中沒有擴展名的這些文件是例如txt或jpg文件,我應該將它們放到正確的文件夾中。 – Sigger
3
沒有bash化等[[
:
case $filename in
(*.*) extension=${filename##*.};;
(*) extension="";;
esac
適用於任何伯恩遺產貝殼。
2
您可以通過去除擴展獲取文件的基本名稱,刪除是從原來的。
base=${filename%.*}
ext=${filename#$base.}
雖然我更喜歡case
聲明;意圖更清晰。
1
對於情況,如:
$ ls file*
file1 file1.txt file2
你可以這樣做:
$ ls file* |awk -F. '{print (NF>1?$NF:"no extension")}'
no extension
txt
no extension
相關問題
- 1. 獲取文件擴展名
- 2. 從文件獲取擴展
- 3. Bash腳本獲取所需的擴展名的所有文件
- 4. 文件名擴展在bash
- 5. BASH獲取沒有GET參數的文件擴展名?
- 6. 使用bash腳本獲取文件擴展名
- 7. 獲取您的擴展的文件夾
- 8. 獲取文件的擴展名,但無法獲取文件名
- 9. 獲取文件的擴展名(編輯)
- 10. 獲取擴展類的文件名
- 11. 獲取除擴展名外沒有擴展名的文件名
- 12. 獲取Php文件/圖像擴展名
- 13. 從文件擴展名獲取ImageFormat
- 14. Primefaces FileUpload獲取文件擴展名
- 15. FileUpload獲取文件擴展名
- 16. Node.js獲取文件擴展名
- 17. 獲取文件擴展名 - jquery
- 18. 從文件url中獲取擴展
- 19. 從文件中獲取擴展屬性
- 20. 使用preg_replace獲取文件擴展名
- 21. 在java中獲取文件擴展名
- 22. 獲取文件擴展名C錯誤
- 23. 獲取文件擴展名C
- 24. Nodejs獲取文件擴展名
- 25. Android - 如何獲取文件擴展名?
- 26. asp.net mvc HttpPostedFileBase獲取文件擴展名
- 27. Smarty獲取文件擴展名
- 28. 獲取緩存文件鍍鉻擴展
- 29. PHP,獲取文件名沒有擴展
- 30. Angularjs如何獲取文件擴展名?
誰downvotes:如果你能解釋我什麼是錯的,我可以檢討我的答案。 – FedericoCapaldo
雖然我還沒有投票給你,我需要告訴你,你的解決方案很容易中斷。只需運行'touch「文件spaced.txt」'並測試你的代碼。此外谷歌周圍你爲什麼不應該解析'ls'的輸出以及如何在for和globing文件中循環(例如'for file in *') - 另一個灰點是當bash配備參數擴展時使用sed可以爲您帶來所需的結果。就像在盧娜公園使用機槍來贏得泰迪熊。而且不是所有的'sed'版本都是一樣的。 –