フォルダに特定の拡張子を持つ特定のファイルがあることを確認する

フォルダに特定の拡張子を持つ特定のファイルがあることを確認する

ファイル構造があるとしましょう。

$ cd /home/Desktop
$ ls -d */
Abc/ Qwe/ Zxc/ Rty/
$

さて、各ディレクトリを繰り返して「.pdf」ファイルがあるかどうかを確認したいと思います。誰かが最良のアプローチが何であるかを教えてもらえますか?

答え1

for dir in Abc/ Qwe/ Zxc/ Rty/; do
  result="$(find "$dir" -maxdepth 1 -type f -name '*.pdf' -printf .)"
  echo "Folder '${dir}' contains ${#result} *.pdf files."
done

これはサブディレクトリを無視します。

答え2

使用find /home/Desktop -type f -name '*.pdf'

答え3

使用することはfind間違いなく最速の方法です。探しているディレクトリを制限するには、次を使用できます。

find <dir1> <dir2> ... -type f -name '*.pdf'

ファイル数を数えるには:

find <dir1> <dir2> ... -type f -name '*.pdf' | wc -l

答え4

情報を使用して実行したい操作に応じて、これを行う方法はいくつかあります。

  • ファイルを直接含むディレクトリのリストが必要な場合.pdf(つまり、サブディレクトリではなく最上位レベルでのみ)、次のようにします。

    dirname */*.pdf | sort | uniq
    
  • すべてのレベルのファイルを含むディレクトリのリストが必要な場合.pdf(そのディレクトリのサブディレクトリにあるように)、次のことを試してください。

    find . -name '*.pdf' | cut -d/ -f2 | sort | uniq
    

    または、特定のサブディレクトリのみを検索する場合は、

    find Abc Qwe Zxc Rty -name '*.pdf' | cut -d/ -f1 | sort | uniq
    
  • .pdfサブディレクトリ内のすべてのファイルのリストが必要な場合は、次の手順を実行します。

    find . -name '*.pdf'
    
  • 各ディレクトリのファイル数を計算するには、.pdf使用する最上位ファイルのみを計算します。

    dirname */*.pdf | sort | uniq -c
    

    または、サブディレクトリにファイルを含めます。

    find . -name '*.pdf' | cut -d/ -f2 | sort | uniq -c
    

    -c(にオプションを追加するだけで違いを確認できますuniq。)

関連情報