拡張子でファイルをソートするスクリプトを書いています。私はファイルの名前でこれを行う方法を知っています。問題は、同じファイルの名前に拡張子がないことです。たとえば、私がファイル:file.txt
を持っている場合、簡単な拡張子を得るのに問題はありませんextension="${filename##*.}"
。しかし、ファイル名がfilename
の場合、この方法は機能しません。ファイルの拡張子を取得し、それをBashスクリプトの変数に入れる他のオプションはありますか?Bash - ファイルの拡張子を取得する
答えて
:のようにあなたが何かを行うことができます
$ ls file*
file1 file1.txt file2
:のような状況では
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
しかし、問題は、名前の拡張子を持たないファイルはtxtやjpgファイルなので、適切なフォルダに置いてください。 – Sigger
[[
ようbashismsなし:
case $filename in
(*.*) extension=${filename##*.};;
(*) extension="";;
esac
Bourne-heritageシェルで動作します。
を削除すると、エクステンション、除外オリジナルからファイルのベース名を得ることができます。
base=${filename%.*}
ext=${filename#$base.}
私はcase
文が好きです。その意図ははっきりしています。あなたが唯一のbashで変数にファイル名のファイル拡張子を置く方法を求めているようだ
$ ls file* |awk -F. '{print (NF>1?$NF:"no extension")}'
no extension
txt
no extension
あなたはソートの部分について質問していません。 これを行うには、次の簡単なスクリプトを使用して、各ファイルの拡張子をファイルリストから出力できます。
#!/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
- > get extention txt
,-> get extention 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. bashスクリプトでファイル拡張子を取得する
- 2. ファイルの拡張子を取得
- 3. ファイル拡張子からImageFormatを取得
- 4. ファイル拡張子の取得方法は?
- 5. タブでのファイル拡張子Bash -
- 6. ドラッグアンドドロップでファイル拡張子のないファイル名を取得する
- 7. 不明なファイル名のファイル拡張子を取得する
- 8. Uploaderの拡張子を取得する
- 9. 拡張子のないファイルの種類を取得するC#
- 10. public.movieのファイル拡張子のリストを取得するUTI
- 11. ファイル拡張子のリストを取得するためのWindowsコマンド
- 12. Excelファイルが元のファイル拡張子を取得するかバイパスファイル形式拡張子が一致しない
- 13. Eclipseエディタに関連するファイル拡張子を取得する
- 14. ファイルの拡張子を取得するC#
- 15. Carrierwaveファイルの拡張子を取得する方法
- 16. Android:Action_Send return Extra_Stream:ファイルの拡張子を取得する方法
- 17. レールアプリケーションのURIからファイル拡張子を取得するには
- 18. System.Reflection.Assemblyでdllファイルの拡張子を取得する
- 19. Angularjsファイル名の拡張子を取得する方法は?
- 20. GoogleドライブV3と.netのファイル拡張子を取得する
- 21. Mimeタイプ(コンテンツタイプ)のファイル拡張子を取得するには
- 22. 拡張子のないディレクトリにファイル名を取得する - Python
- 23. ファイルの拡張子を取得する(編集)
- 24. System.net.mail添付ファイルは.xmlファイル拡張子を取得します
- 25. ファイル名と拡張子を絶対パスから取得する
- 26. tfs api拡張子でファイルを取得する
- 27. Androidでファイル拡張子を取得する方法は?
- 28. Kotlin:標準機能付きファイル拡張子を取得する
- 29. アップロード中にファイル拡張子を取得する
- 30. ファイル拡張子を取得する方法
誰のためにdownvotes:何が間違っている私を説明することができれば私は私の答えを確認することができます。 – FedericoCapaldo
私はあなたに投票していませんが、私はあなたの解決策が簡単に壊れていることを伝える必要があります。ファイル 'spaced.txt 'を' touch'してコードをテストするだけです。さらに、なぜ 'ls'の出力を解析してはならないのか、forとglobingを使ってファイルをループする方法(つまり、' for file in * ')について、グーグルが言及しています - もう一つの灰色の点は、bashにパラメータ拡張必要な結果をもたらすことができます。テディベアに勝つためにルナ公園の機関銃を使うようなものです。さらに、すべての 'sed'バージョンが同じように動作するわけではありません。 –