lsでファイルをタイプ別にリストするにはどうすればよいですか?


20

lsオプションを指定してコマンドを使用すると、-l最初の文字列は各ファイルに関する情報を提供し、この文字列の最初の文字はファイルのタイプを提供します。(d=ディレクトリ、-=標準ファイル、l=リンクなど)

その最初の文字に従ってファイルをフィルタリングするにはどうすればよいですか?


2
欲しいものはこれだと思います
devnull 14年

回答:


9

grepこの方法を使用して、ディレクトリ以外のすべてを除外できます。

ls -l | grep '^d'

^、パターンが行の先頭にあることを示します。交換するd-l該当するとして、など。

もちろん、他のコマンドを使用して特定のタイプ(例find . -maxdepth 1 -type d)を直接検索したりls -l | sort、この最初の文字に基づいて同様のタイプをグループ化するために使用できますが、フィルタリングする場合はgrep、出力から適切な行のみを選択する必要があります。


シンボリックリンクがある場合は、使用することをお勧めしますls -lL-Lシンボリックリンクをたどって、ディレクトリまたはファイルにリンクされているかどうかを示します。
木の実

8

すべての出力を表示したいが、類似したタイプのファイルが一緒にリストされている場合、各行の最初の文字で出力をソートできます。

ls -l | sort -k1,1

downvoteの理由は?
ジョセフR. 14年

1
おそらくテキスト処理ルーチンを使用しているため、プレーンテキスト操作は特定のタイプの開発者(私の同僚のほとんどなど)の間で「クールではない」または「間違っている」と認識されています。シンプルで正解に対する賛成票が与えられた。
マークKコーワン14年

8

このコマンドlsは、ディレクトリデータ構造に記録されているファイル名を処理しています。そのため、ファイルの「タイプ」を含め、ファイル自体を実際には気にしません。

名前だけでなく、実際のファイルでの作業により適したコマンドはfindです。ファイルタイプでリストをフィルタリングする方法に関する質問に直接答えるオプションがあります。

これにより、次のような現在のディレクトリのリストが表示されls -lます。

find . -maxdepth 1 -ls

デフォルトでは、find1に検索の深さを制限することによって無効化され、再帰的にリストのディレクトリは、
あなたが出て残すことができます.が、私はディレクトリはオプションの前に表示する必要があります表示するには、それが含まれています。

を使用すると-type、プレーンファイルまたはディレクトリとして、fまたはdプレーンファイルまたはディレクトリとして表されるファイルタイプでフィルタリングできます。

find . -maxdepth 1 -type d -ls

-type、特にlシンボリックリンクには、他のフィルター値があります。
注があることをシンボリックリンクwhith合併症
:この場合、ファイルの2種類がありl、シンボリックリンクを示すが、とのようなものfにリンクされたファイルのタイプを示すが、。その処理方法を指定するオプションがあるため、選択できます。


からman find

    -type c
           File is of type c:

           b      block (buffered) special

           c      character (unbuffered) special

           d      directory

           p      named pipe (FIFO)

           f      regular file

           l      symbolic link; this is never true if the  -L  option
                  or  the -follow option is in effect, unless the sym‐
                  bolic link is broken.  If you  want  to  search  for
                  symbolic links when -L is in effect, use -xtype.

           s      socket

           D      door (Solaris)

シンボリックリンクの処理に関連します。

    -xtype c
           The  same as -type unless the file is a symbolic link.  For
           symbolic links: if the -H or -P option was specified,  true
           if the file is a link to a file of type c; if the -L option
           has been given, true if c is `l'.  In other words, for sym‐
           bolic  links, -xtype checks the type of the file that -type
           does not check.

そして

    -P     Never follow symbolic links.  This is  the  default  behav‐
           iour.  When find examines or prints information a file, and
           the file is a symbolic link, the information used shall  be
           taken from the properties of the symbolic link itself.


    -L     Follow symbolic links.  When find examines or prints infor‐
           mation about files, the information  used  shall  be  taken
           from  the  properties of the file to which the link points,
           not from the link itself (unless it is  a  broken  symbolic
           link  or  find  is  unable to examine the file to which the
           link points).  Use of this option implies -noleaf.  If  you
           later  use  the -P option, -noleaf will still be in effect.
           If -L is in effect and find discovers a symbolic link to  a
           subdirectory during its search, the subdirectory pointed to
           by the symbolic link will be searched.

           When the -L option is in effect, the -type  predicate  will
           always  match  against the type of the file that a symbolic
           link points to rather than the link itself (unless the sym‐
           bolic  link  is  broken).   Using  -L causes the -lname and
           -ilname predicates always to return false.


    -H     Do not follow symbolic links, except while  processing  the
           command  line  arguments. [...]

2

他の種類のファイルからフォルダを並べることに最も関心がある場合は、

ls --group-directories-first

それ以外の場合、Anthonが回答したとおり、sortまたはgrepを介してls -lからの出力をパイプする必要があると思います


2
ls -l | awk '/^d/{print $NF}

awkは、dで始まるすべてをキャッチします。dはディレクトリ用で、最後のフィールドを印刷してディレクトリ名をリストする必要があるため


1
ls -l | sort 

これにより、各結果のアルファベット順に従って結果がソートされます。最初の文字が必要な基準であれば、それだけです。ファイル名のみが必要な場合は、次を試してください:

ls -l | sort | cut -f 2 -d ' ' 

または類似のもの(このコマンドは、スペース区切り文字を使用して各行をソートしてから分割し、2番目のグループを返します。


編集Ticoのおかげで、電話で入力した内容を確認するのは困難です。
ファビオ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.