ディレクトリ内の特定の種類のファイルを一覧表示しますか?

ディレクトリ内の特定の種類のファイルを一覧表示しますか?

(現在のディレクトリ内の)ディレクトリのみを一覧表示するには、次のようにします。ls -d */

通常のファイル、実行可能ファイル、ソフトリンク、または他の種類のファイルのみを一覧表示するにはどうすればよいですか?

実行可能ファイル、シンボリックリンクファイル、ディレクトリにls -F 追加するために試しましたが、うまくいきません。*@/ls -d **ls -d *@

答え1

で説明されているファイルテスト演算子を使用できますman test。たとえば、シンボリックリンクを一覧表示するには、次のようにします。

for i in *;do if [ -L "$i" ] ;then printf -- "%s\n" "$i";fi;done

答え2

あなたはそれを使用することができますfind

すべてのファイルのリスト:

find . ! -name . -prune -type f

すべてのシンボリックリンクを一覧表示します。

find . ! -name . -prune -type l

すべての実行可能ファイルを一覧表示します。

find . ! -name . -prune -type f -perm +111

POSIXを読むことができます探す高度なオプションのドキュメントです。

答え3

このコマンドは、ls -d *@で始まる名前を一覧表示します@。この@文字は、ファイル名が一致する必要があるパターンの一部です。ファイル名の後に文字が表示されると、ls -Fその文字はファイル名の一部ではなく、追加の表示が追加されますls(このオプションのポイント-F)。

ls一覧表示するファイルの種類を選択するオプションはありません。ファイル名に特殊文字(改行やls -Fサフィックスなど)が含まれていない場合は、ls -F特定の種類のファイルを一覧表示してを使用してその出力をフィルタリングできます。たとえば、現在のディレクトリのシンボリックリンクを一覧表示するには、次のようにします。

ls -F | grep '@$'

選択した種類のファイルを一覧表示するより信頼性の高い方法は、findコマンドを使用することです。lsとは異なり、find再帰的です。これ-pruneにより、再帰を停止できます。別の違いは、名前がfind(dot-file)で始まるファイルは、シェルモードのように特に処理されずにスキップされることです。たとえば、次のコマンドは現在のディレクトリのシンボリックリンクを一覧表示します。.ls*

find . -name . -o -type l -print -o -prune

フィルタリングを実行する別の方法は、すべてのファイルを繰り返しテストして目的のファイルを選択することです。

for x in *; do
  if [ -L "$x" ]; then echo "$x"; fi
done

zshでは利用可能ですグローバル予選タイプ別にファイルを制限します。たとえば、次のzshコマンドは、現在のディレクトリのシンボリックリンクを一覧表示します。

print -rl *(@)

答え4

リストからcソースファイル(サフィックス.c)だけを見たいとしましょう。

ls -l *.c

これにより、すべてのCコードファイルが一覧表示されます。

楽しむ

関連情報