現在のディレクトリの一般ファイルのみを一覧表示します(ディレクトリは除く)。

現在のディレクトリの一般ファイルのみを一覧表示します(ディレクトリは除く)。

これを使用して、ls -ld */現在のディレクトリのすべてのディレクトリエントリを一覧表示できます。現在のディレクトリのすべての一般的なファイルを一覧表示する同様の簡単な方法はありますか? findが利用可能であることを知っています

find . -maxdepth 1 -type f

または統計

stat -c "%F %n" * | grep "regular file" | cut -d' ' -f 3-

しかし、これらのどれも過度に豪華に見えません。現在のディレクトリのサブディレクトリをリストするのではなく、通常のファイル(デバイス、パイプなどは気にしません)だけをリストする素晴らしい短い方法はありますか?シンボリックリンクをリストすることも利点ですが、必須ではありません。

答え1

ls -p | grep -v / 

このコマンドは隠されていないすべてのファイル(一般ファイル、リンク、デバイスファイル、等。 )。隠しファイルも含めるには、-A次のオプションを追加します。ls

すべてのファイル名に改行文字がないとします。-qオプションを追加すると、ls印刷できないすべての文字(改行を含む)がに変換され、その文字が?1行にあるため、grepターミナル印刷などの行ベースのユーティリティに入力するのに適しています。

答え2

そしてzshグローバル予選次のように簡単に直接表現できます。

echo *(.)

構成によっては、通常のファイルリストまたはエラーのみが返されます。

ディレクトリでない場合:

echo *(^/)

(シンボリックリンク(ディレクトリを含む)、名前付きパイプ、デバイス、ソケット、ゲートなどが含まれます...)

echo *(-.)

一般ファイルと一般ファイルへのシンボリックリンクの場合。

echo *(-^/)

ディレクトリでない場合、ディレクトリへのシンボリックリンクもありません。

さらにD含めるには、globbing修飾子を参照してください。Dotファイル(隠しファイル)、*(D-.)例:

答え3

一般ファイルのみをリストします。

ls -al | grep '^-'

シンボリックリンク(すべての種類のファイル)には、次のものが含まれます。

ls -al | grep '^[-l]'

ここで、リストの最初の文字はファイルの種類を記述します。つまり、-シンボリックリンクがあるため、通常のファイルであることを意味しますl

Debian/Ubuntu

リンクを含む一致するすべてのファイルの名前を印刷します。

run-parts --list --regex . .

絶対パスを使用します。

run-parts --list --regex . "$PWD"

/etcp次に始まり、終わるすべてのファイルの名前を印刷しますd

run-parts --list --regex '^p.*d$' /etc

答え4

bash-4.2$ ls -F | grep -v '[/@=|]$' | more

lsの-Fオプションは、*を実行可能ファイルに、/をディレクトリに、@をシンボリックリンクに、=をソケットに、| FIFOで。その後、grepを使用して出力から非正規ファイル文字を除外すると、ファイルが生成されます。これはzshだけでなく、すべてのシェルで動作します。

弱点は次のとおりです。

  1. @=名前、またはで終わるすべてのファイルは|除外されます(ただし、名前にその文字を含むファイルは実際には存在しません)。
  2. これは、一部のシステム(ステートメントなど)のデバイスファイルや特殊な種類のファイルを除外しません。
  3. 実行可能ファイルにアスタリスクを追加します。これは、出力から「*」文字を削除するためにsedを介してパイピングすることによって処理できます。
  4. ファイル名に改行文字が含まれていると、この方法は正しく機能しません。

関連情報