ファイル構造があるとしましょう。
$ 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
。)