web-dev-qa-db-ja.com

フォルダーに特定の拡張子のファイルが含まれているかどうかを確認する

私がファイル構造を持っているとしましょう:

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

ここで、すべてのディレクトリを繰り返し処理して、「。pdf」ファイルがあるかどうかを確認します。これを行うための最良の方法は何ですか?

4
gkmohit
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

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

6
Hauke Laging

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

2
gena2x

findを使用することは、確かにそれを行う最も速い方法です。検索するディレクトリを制限する場合は、次を使用できます。

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

ファイルの数を数えたい場合:

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

1
Xavier

zshの場合:

for dir (Abc Qwe Zxc Rty) {
  pdf=($dir/*.pdf(ND.))
  print -r "Directory '$dir' contains ${#pdf} *.pdf files"
}
1

情報をどのように処理するかに応じて、これを行うにはいくつかの異なる方法があります。

  • .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
    

    (違いは、uniq-cオプションを追加するだけです)。

1
David Z