現在のディレクトリ内のファイルを一覧表示するときにディレクトリを除外するにはどうすればよいですか?
ls .
^はディレクトリをリストに含めます。
これを試してください:
find . -maxdepth 1 -not -type d
ls .
と完全に同等にするには、隠しディレクトリを表示しないようにする必要があります。
find . -maxdepth 1 -not -type d -and -not -name '.*'
それでも、各ファイル名の前に './'が付いたままになります。それは実際には問題ではありませんが、少し醜いと思います。私は一緒に行きました:
ls -p | grep -v '/$'
そして、同じように見えるリストが表示され、ls
引数を追加することもできます。 --color=always
を追加すると、dircolorsが返されます。隠しファイルを表示するには、-a
を追加します。
私はアレクサンダーの答えが好きです。なぜなら、彼は実際には問題のファイルのファイルシステム特性に依存しているため、だまされないからです。私の答えは、ファイル名の最後の文字が「/」のファイルにだまされてしまいます。しかし、それはそれが問題を求めているようです。
これを試して:
$見つける。 -type f -maxdepth 1
またはこれ:
$ ls -p | egrep -v/$
$ ls -la | egrep -v ^ d
古い投稿ですが、役立つかもしれないと思いました。
$ ls -l | grep -v ^ d
シンボリックリンク、キャラクター、ブロックファイルを含むすべてのファイルがリストされます。
上記の「検索」ソリューションではlsの機能の一部が失われます。たとえば、変更時間の降順にソートされたファイルのみを一覧表示します。
「ls -p | grep」の回答は、必要な場合、-Rなどのlsの他の要素をエレガントに処理しません
次の答えは、より冗長ですが、私の意見では、真のlsの動作と、「ファイルのみ」を選択するための最も柔軟性を反映しています
ls -t . | while read line; do
if [ -f $line ]; then
echo $line
fi
done
必要に応じてlsスイッチを置き換えるだけで、ファイルのみが返されます。リンクやその他のアイテムも必要な場合は、含めるためにテストを少しやり直す必要があります。
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
これにより、ls
が通常取る他のオプションを引き続き使用できます。または... -v
を削除して、ディレクトリのみを一覧表示します。または... file
が理解し、ASCII、空、ELFなどのレポートを作成する他のファイルタイプでディレクトリを置き換えます。
私はfind
バイナリが-not
をサポートしていないシステムを使用していたため、次のように使用しました。
ls|while read f;do [ -f "$f" ]&& echo $f;done
利点:sh ls echo
以外に依存しない
bashおよびdashと互換性があります-f
を変更することで、他のもの(ディレクトリなど)に一致するように変更できます
一部の回答よりも速く、使用するRAMおよびCPU