web-dev-qa-db-ja.com

ファイルを一覧表示するときにディレクトリを除外するにはどうすればよいですか?

現在のディレクトリ内のファイルを一覧表示するときにディレクトリを除外するにはどうすればよいですか?

ls .

^はディレクトリをリストに含めます。

22
Stephen Watkins

これを試してください:

find . -maxdepth 1 -not -type d
23

ls .と完全に同等にするには、隠しディレクトリを表示しないようにする必要があります。

find . -maxdepth 1 -not -type d -and -not -name '.*'

それでも、各ファイル名の前に './'が付いたままになります。それは実際には問題ではありませんが、少し醜いと思います。私は一緒に行きました:

ls -p | grep -v '/$'

そして、同じように見えるリストが表示され、ls引数を追加することもできます。 --color=alwaysを追加すると、dircolorsが返されます。隠しファイルを表示するには、-aを追加します。

私はアレクサンダーの答えが好きです。なぜなら、彼は実際には問題のファイルのファイルシステム特性に依存しているため、だまされないからです。私の答えは、ファイル名の最後の文字が「/」のファイルにだまされてしまいます。しかし、それはそれが問題を求めているようです。

16
Sean O'Leary

これを試して:

$見つける。 -type f -maxdepth 1

またはこれ:

$ ls -p | egrep -v/$

$ ls -la | egrep -v ^ d

5
jamzed

古い投稿ですが、役立つかもしれないと思いました。

$ ls -l | grep -v ^ d

シンボリックリンク、キャラクター、ブロックファイルを含むすべてのファイルがリストされます。

3
sandeep.s85

上記の「検索」ソリューションではlsの機能の一部が失われます。たとえば、変更時間の降順にソートされたファイルのみを一覧表示します。

「ls -p | grep」の回答は、必要な場合、-Rなどのlsの他の要素をエレガントに処理しません

次の答えは、より冗長ですが、私の意見では、真のlsの動作と、「ファイルのみ」を選択するための最も柔軟性を反映しています

ls -t . | while read line; do
  if [ -f $line ]; then
    echo $line
  fi 
done

必要に応じてlsスイッチを置き換えるだけで、ファイルのみが返されます。リンクやその他のアイテムも必要な場合は、含めるためにテストを少しやり直す必要があります。

2
Pancho
ls $(file --no-pad  -F' '  * | grep -v directory | cut -d' ' -f1)

これにより、lsが通常取る他のオプションを引き続き使用できます。または... -vを削除して、ディレクトリのみを一覧表示します。または... fileが理解し、ASCII、空、ELFなどのレポートを作成する他のファイルタイプでディレクトリを置き換えます。

0
Kaulbach

私はfindバイナリが-notをサポートしていないシステムを使用していたため、次のように使用しました。

ls|while read f;do [ -f "$f" ]&& echo $f;done

利点:sh ls echo以外に依存しない
bashおよびdashと互換性があります
-fを変更することで、他のもの(ディレクトリなど)に一致するように変更できます
一部の回答よりも速く、使用するRAMおよびCPU

0
Alexx Roche