私がファイル構造を持っているとしましょう:
$ cd /home/Desktop
$ ls -d */
Abc/ Qwe/ Zxc/ Rty/
$
ここで、すべてのディレクトリを繰り返し処理して、「。pdf」ファイルがあるかどうかを確認します。これを行うための最良の方法は何ですか?
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
これはサブディレクトリを無視します。
使用する find /home/Desktop -type f -name '*.pdf'
。
find
を使用することは、確かにそれを行う最も速い方法です。検索するディレクトリを制限する場合は、次を使用できます。
find <dir1> <dir2> ... -type f -name '*.pdf'
ファイルの数を数えたい場合:
find <dir1> <dir2> ... -type f -name '*.pdf' | wc -l
zsh
の場合:
for dir (Abc Qwe Zxc Rty) {
pdf=($dir/*.pdf(ND.))
print -r "Directory '$dir' contains ${#pdf} *.pdf files"
}
情報をどのように処理するかに応じて、これを行うにはいくつかの異なる方法があります。
.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
オプションを追加するだけです)。