1つのフォルダのすべてのファイルを一覧表示できますが、フォルダやサブファイルは一覧表示できません。言い換えると、ファイルのみを一覧表示するにはどうすればよいですか?
1つのフォルダのすべてのファイルを一覧表示できますが、フォルダやサブファイルは一覧表示できません。言い換えると、ファイルのみを一覧表示するにはどうすればよいですか?
回答:
使用find:
find . -maxdepth 1 -type f
この-maxdepth 1オプションを使用すると、現在のディレクトリ(または、.を何らかのパスに置き換えると、そのディレクトリ)のみが表示されます。そのディレクトリとサブディレクトリ内のすべてのファイルの完全な再帰的リストが必要な場合は、そのオプションを削除するだけです。
findMacでは、オプション-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ですdlls(実行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適切に引用していないため、壊れてしまいます。