2016-11-21 2 views
0

ディレクトリの名前は既知であり、このディレクトリ内のすべてのファイルが同じ拡張子を持つことがわかります。 1つの拡張子を抽出し、それを変数に代入するだけでよいです。ディレクトリ内のファイルの拡張子を抽出するにはどうすればよいですか?

ディレクトリの内容によって異なるルーチンを使用するスクリプトがあります。たとえば、フォルダにjpg個のファイルが含まれている場合、スクリプトはtiffファイルに対して異なる処理を実行します。私のスクリプトは、ファイルの名前や数字を知る必要はなく、拡張子だけを知る必要があります。だから私はファイルのいずれかの拡張子を抽出する必要があります(すべてのファイルは同じ拡張子を持っています)、変数に割り当てます。

私はこのような何かをしようとしている:"*"ワイルドカードは、すべてのファイルを一覧表示します

variable=$(basename "/path/dir/*") 
extension="${variable##*.}" 

。私は1つだけの内線番号が必要です。

+0

不明なファイルの拡張子はどういう意味ですか?あなたにファイルのタイプを伝える 'file'コマンドがあります。特定のファイル名の拡張子だけを抽出するbashスクリプトを求めていますか? – varlogtim

+0

ディレクトリがわかっていますが、ファイル名は不明であり、名前やその数を知る必要はありません。私のスクリプトに必要なファイル拡張子の1つだけ。 – siamak

+2

ディレクトリの内容の例と、スクリプトで必要なものを提供できますか? – varlogtim

答えて

0
extension=$(ls directory_path/ | awk -F. 'NR==1{print $NF}') 
0

awkを使用して内線番号を見つけることができます。

for file in directory/*.*; do 
    var=$(echo $file | awk 'BEGIN{FS="."} {print $NF}') 
    break 
done 

この例では、FSはawkにピリオド "。"を使用するように指示します。 $ NFは最後のフィールドを指定します。

+0

ありがとうございます。残念なことに、それは私に構文エラー "予期しないトークン' do 'の近くで構文エラーを与えます。 – siamak

+0

Strange。 "do"を自分の行に移動し、セミコロンを最初の行の末尾から削除して、それが何か変わるかどうかを調べることができます。また、私は2行目の最後の一重引用符を忘れてしまったので、この例を編集しなければならなかったことに注意してください。何も動作しない場合は、実行しているコマンド(ディレクトリテキストとすべて)を投稿してみてください。 – Guest

+0

ありがとうございました。私は{print $ NF}の後に "'"がないと思います。 – siamak

0
file=$(find directory -maxdepth 1 -mindepth 1 -type f -print -quit) 
ext="${file##*.}" 
find

コマンドは、directoryの最初のファイルは、パスを出力し、終了見出します。結果(パス)はfile変数に書き込まれます。

次の行は、*.の最長一致をパスの先頭から削除し、その結果をext変数に割り当てます。

-maxdepth-mindepthのオプションを適宜調整します。

関連する問題