1つのフォルダのすべてのファイルを一覧表示できますが、フォルダやサブファイルは一覧表示できません。言い換えると、ファイルのみを一覧表示するにはどうすればよいですか?
1つのフォルダのすべてのファイルを一覧表示できますが、フォルダやサブファイルは一覧表示できません。言い換えると、ファイルのみを一覧表示するにはどうすればよいですか?
回答:
使用find
:
find . -maxdepth 1 -type f
この-maxdepth 1
オプションを使用すると、現在のディレクトリ(または、.
を何らかのパスに置き換えると、そのディレクトリ)のみが表示されます。そのディレクトリとサブディレクトリ内のすべてのファイルの完全な再帰的リストが必要な場合は、そのオプションを削除するだけです。
find
Macでは、オプション-type
も-maxdepth
オプションもありません。
-type
そして通常の意味でのオプションで-maxdepth
はありません。BSD (OS Xで使用される)はそれらをプライマリと呼び、ファイル名オペランドの後に来る必要があります(この場合、Linuxとは異なり、BSDバージョンには少なくとも1つの明示的なファイル名オペランドが必要です)。この回答のコマンドは間違いなくMacで機能します。find
.
find *.png -maxdepth 0 -type f
避けるために./
、出力ファイル名に接頭辞を、また、注意-maxdepth
の0
ではないが、1
)、限り、あなたが必要とするすべてのファイルであるとして名でアルファベット順。ls
[マルチ]タイプのフィルタリングを追加して、他の方法で何ができるか(異なる出力形式/順序、非表示アイテムを含めるかどうかのインライン制御)が必要な場合は、私の回答のスクリプトが役立ちます。
find * -maxdepth 0 -type f
(@AlexHallのコメントから派生した代替案)とfind . -maxdepth 1 -type f
答えを比較するとfind . ...
、常に非表示の項目が含まれ、出力ファイル名の前に常に接頭辞が付き./
、GNU find
(Linux)では通常ソートされていないリストが出力されます。find * ...
、シェルに事前にグロブを実行させるため、デフォルトでは非表示のアイテムを除外し(で変更できますshopt -s dotglob
)、アルファベット順にソートされた単なるファイル名(プレフィックスなし)を出力します。どちらのアプローチにも、ファイルへのシンボリックリンクは含まれていません。-L
これを行うにはオプションを使用します。
carlpettのfind
回答(find . -maxdepth 1 -type f
)は原則として機能しls
ますが、使用するのとまったく同じで./
ls
はありません。すべてプレフィックスが付いた、ソートされていない可能性のあるファイル名のリストを取得し、の多くのオプションを適用する機能を失います。
また、find
常に非表示のアイテムも検出しますが、ls
'の動作は-a
または-A
オプションの有無によって異なります。
改善によって示唆され、アレックス・ホール問題のコメントでは、することですコンバインシェルグロブではfind
:
find * -maxdepth 0 -type f # find -L * ... includes symlinks to files
ls
、他の多くの並べ替え/出力形式オプションにアクセスしたりすることはできません。Hans Roggemanのls
+のgrep
答えは実用的ですが、長い(-l
)出力形式を使用するようにロックします。
私が書いたこれらの制限に対処するためにfls
(fはiltering LSユーティリティ)を、
ls
提供すると同時に、タイプフィルタリング機能も提供するユーティリティ。f
ですd
l
ls
(実行fls --help
または詳細fls --man
を確認するため)。例:
fls f # list all files in current dir.
fls d -tA ~ # list dirs. in home dir., including hidden ones, most recent first
fls f^l /usr/local/bin/c* # List matches that are files, but not (^) symlinks (l)
サポートされているプラットフォーム
注:Node.jsを使用しない場合でも、そのパッケージマネージャーはnpm
プラットフォーム間で機能し、簡単にインストールできます。試してみてください
curl -L https://git.io/n-install | bash
Node.jsがインストールされ、以下のように、インストールします。
[sudo] npm install fls -g
注:
必要かどうかsudo
は、Node.js / io.jsのインストール方法と、後でアクセス許可を変更したかどうかによって異なります。EACCES
エラーが発生した場合は、を使用して再試行してくださいsudo
。
-g
確実に世界的なインストールをして置くために必要とされるfls
システムの中で$PATH
。
bash
スクリプトをとしてダウンロードしますfls
。chmod +x fls
ます。$PATH
などのフォルダに移動またはシンボリックリンクします。/usr/local/bin
/usr/bin
-1
(ナンバーワン); ls
実際には、デフォルトで「ベア」出力、つまりファイル名のみになりますが、端末に出力する場合は、列ベースのレイアウト(1行に複数のファイル名)が使用されます。出力行ごとに1つのファイル名を取得するには(dir /b
メモリが機能する-1
場合はこれを行います)、オプションを使用します。これは、パイプや出力ファイルに送信するときなど、stdoutが端末に接続されていないときに実際に暗黙的にオンになります。
ls
サンプルとして、オプションを使用するのが好きです。
-l
長いリスト形式を使用する-t
変更時間で並べ替え、最新のものから-r
並べ替え中の逆順-F
、--classify
エントリにインジケータ(* / => @ |の1つ)を追加します-h
、--human-readable
-lおよび-sを使用すると、1K 234M2Gなどの印刷サイズ...
いつか--color
他のすべて。(を参照ls --help
)
これにより、ファイル、シンボリックリンク、デバイス、パイプ、ソケットなどが表示されます。
そう
find /some/path -maxdepth 1 ! -type d
日付で簡単に並べ替えることができます:
find /some/path -maxdepth 1 ! -type d -exec ls -hltrF {} +
または
find /some/path -maxdepth 1 -type f
サイズでソート:
find /some/path -maxdepth 1 -type f -exec ls -lSF --color {} +
名前がドットで始まる非表示のエントリを表示しないようにするには、次を追加し! -name '.*'
ます。
find /some/path -maxdepth 1 ! -type d ! -name '.*' -exec ls -hltrF {} +
次に
あなたは置き換えることができます/some/path
によって.
のためにリストに、現在のディレクトリまたは..
のための親ディレクトリ。
ファイルの検索:ls -l / home | grep "^-" | tr -s '' | カット-d '' -f 9
ディレクトリの検索:ls -l / home | grep "^ d" | tr -s '' | カット-d '' -f 9
リンクを見つける:ls -l / home | grep "^ l" | tr -s '' | カット-d '' -f 9
tr -s ''は、出力をスペースで区切られたファイルに変換します。cutコマンドは、区切り文字がスペースであることを示し、9番目のフィールド(常にファイル名/ディレクトリ名/リンク名)を返します。
いつも使っています!
{ find . -maxdepth 1 -type f | xargs ls -1t | less; }
xargs
それを機能させるために追加され、追加情報なしでファイル名のみを表示する-1
代わりに使用され-l
ますls
find -printf0 '...' | sort -z
カーペットの答えに追加するだけです。ファイルを非常に便利に表示するには、出力をlsにパイプします。
find . -maxdepth 1 -type f|ls -lt|less
最近変更されたファイルをリスト形式で表示します。これは、多数のファイルをダウンロードしていて、最近のファイルの整理されたバージョンを表示したい場合に非常に便利です。
ls
標準入力を読み取らないため、に何かをパイプすることは無意味ls
です。見逃しましたxargs
か?
find
、この回答のコマンドは完全に無視されます。全体的なコマンドは、タイプフィルタリングls -lt | less
を実行しないと同じです。
find
を使えばできますがfind . -maxdepth 1 -type f -ls
。Mac OSでも動作するようですが、適切に移植できるオプションではない-maxdepth
と思い-ls
ます。
「find'-maxdepth '」は古いバージョンのbashでは機能しないため、次を使用します。
$(ls)のfの場合; if [-f $ f]; 次に$ fをエコーします; fi; 完了
for f in $(ls)
は二重に間違っています。でそれを修正することはできfor f in *
ますが、引数をecho
適切に引用していないため、壊れてしまいます。