ディレクトリが配列変数と一致するかどうか

ディレクトリが配列変数と一致するかどうか

ディレクトリにファイル拡張子の配列が含まれていることを確認したいと思います。 UbuntuでBashを使用しています。

それは次のとおりです。

files=$(ls $1/*)

extensions=$( txt pdf doc docx)

if [[ -e $files[@] contains $extenstions[@] ]] && echo "document exists" || 

echo "nothing found"

ベストアンサー1

この試み:

shopt -s nullglob
files=(*.txt *.pdf *.doc *.docx)
if [[ ${#files} -eq 0 ]]; then echo "nothing found"; fi

または

shopt -s nullglob extglob
files=(*.+(txt|pdf|doc|docx))
if [[ ${#files} -eq 0 ]]; then echo "nothing found"; fi

すべてのサブディレクトリにもファイルが必要な場合:

shopt -s nullglob extglob globstar
files=(**/*.+(txt|pdf|doc|docx))
if [[ ${#files} -eq 0 ]]; then echo "nothing found"; fi

からman bash

nullglob: 設定されている場合、bash はファイルと一致しないパターンを自分ではなく空の文字列に拡張することを許可します。

extglob:設定すると、拡張パターンマッチング機能が有効になります。下記をご覧ください。

globstar:設定されている場合、パス名拡張コンテキストで使用されるパターン**は、すべてのファイルとゼロ以上のディレクトリとサブディレクトリと一致します。

拡張ワイルドカード:

?(pattern-list):与えられたパターンが0個または1個発生するのと一致します。

*(pattern-list):与えられたパターンのゼロ以上の発生と一致します。

+(pattern-list): 指定されたパターンと 1 つ以上一致します。

@(pattern-list):与えられたパターンの1つと一致します。

!(pattern-list):与えられたパターンの1つを除くすべてと一致します。

おすすめ記事