たとえば、ディレクトリ内のファイルとディレクトリを探しています。
ubuntu@example:/etc/letsencrypt$ sudo find . -name example.com*
./archive/example.com
./renewal/example.com.conf
./live/example.com
ubuntu@example:/etc/letsencrypt$
上記の出力でディレクトリをどのように表示できますか./archive/example.com
?./live/example.com
答え1
ファイルの種類と名前を印刷するには、次のコマンドを使用します-printf "%y %p\n"
。
$ sudo find . -name 'example.com*' -printf "%y %p\n"
d ./archive/example.com
f ./renewal/example.com.conf
d ./live/example.com
GNUが想定されています(-printf
Linuxシステムでfind
最も一般的な実装)。find
答え2
ダブル検索:
echo 'directories'
find . -name 'example.com*' -type d
echo 'non-directories'
find . -name 'example.com*' ! -type d
また、名前テストに使用されたパターンへの参照も参照してください。引用符がない場合、シェルはを呼び出す前に文字列を現在のディレクトリの名前と一致させようとしますfind
。failglob
シェルオプションがシェルに設定されているbash
場合、またはシェルオプションがアンセットされていない場合、何も一致しない引用符のないワイルドカードパターンはシェルでエラーを生成し、まったく呼び出されません。NOMATCH
zsh
find
または、ディレクトリパス名の末尾にスラッシュを出力します(ls -p
ディレクトリの表示方法)。
find . -name 'example.com*' \( -type d -exec printf '%s/\n' {} \; -o -print \)
上記find
のコマンドは、まず名前が正しいことをテストします。そうであれば、ディレクトリであり、printf
後にスラッシュが付いた出力ディレクトリのパス名を呼び出します。ディレクトリでない場合は、-print
パス名をそのまま出力するために使用されます。
GNUの場合、find
この-exec printf '%s/\n' {} \;
ビットは-printf '%p/\n'
。
標準を使用すると、外部ユーティリティの呼び出しはfind
できるだけ少なくなりますが、これはディレクトリがおそらく最後に出力されるか、少なくとも一括出力されることを意味します。-exec printf '%s/\n' {} +
printf
別のオプションは、実際にls -p
ディレクトリを他のファイル形式と区別するために使用することです。を使用すると、上記と同様にディレクトリls -p
が末尾の文字とともに一覧表示されます。/
find . -name 'example.com*' -exec ls -f -d -p {} +
出力の並べ替えを-f
避け、リストを避けるためにここを使用しています。ls
-d
コンテンツ目次。
また入れるls -F
代わりにls -p
その他ディレクトリ以外のファイル形式を表示します。たとえば、実行可能ファイルにはサフィックスが続き、*
シンボリックリンクにはサフィックスが付きます@
。
および-p
(-F
および-f
)は-d
どちらもこのユーティリティの標準オプションですls
。
答え3
次のように使用できますfile
。
sudo find . -name "example.com*" -print0 | xargs -0 sudo file
出力例:
$ sudo find . -name "example.com*" -print0 | xargs -0 sudo file
./example.com. big file: ASCII text
./example.com-dir: directory
./example.com: empty
答え4
gnuオプションなしで* nixバージョンで使用できるより移植性の高いオプション(macOSなど)が必要な場合は、-printf
次のようにディレクトリパスの末尾にスラッシュを追加できます。ls
find . -name "example.com*" -exec ls -dF {} \;
例:
$ sudo find . -name "example.com*" -exec ls -dF {} \;
./archive/example.com/
./renewal/example.com.conf
./live/example.com/
これは、より多くのUNIXコマンドの追加パイプに適した形式でもあります。