ls はシンボリックリンクのディレクトリ内容を無視します。

ls はシンボリックリンクのディレクトリ内容を無視します。

シンボリックリンクを表示せずにすべてのもの(ファイルとサブディレクトリ)を一覧表示したいディレクトリがあります。私はLinuxでGNUユーティリティを使用しています。バージョンはls8.13です。

例:

フルディレクトリリスト:

~/test$ ls -Gg
total 12
drwxrwxr-x 2 4096 Jul  9 10:29 dir1
drwxrwxr-x 2 4096 Jul  9 10:29 dir2
drwxrwxr-x 2 4096 Jul  9 10:29 dir3
-rw-rw-r-- 1    0 Jul  9 10:29 file1
-rw-rw-r-- 1    0 Jul  9 10:29 file2
lrwxrwxrwx 1    5 Jul  9 10:29 link1 -> link1
lrwxrwxrwx 1    5 Jul  9 10:30 link2 -> link2

欲しいもの

~/test$ ls -somthing (or bash hack)
total 12
dir1 dir2 dir3 file1 file2

注:私の主な動機は、シンボリックリンクに従わずに再帰的なgrep(GNU grep 2.10)を実行することです。

ベストアンサー1

指定された問題には次のものがあります。find:

find . -mindepth 1 ! -type l

現在のディレクトリやシンボリックリンクではなく、サブディレクトリ内のすべてのファイルとディレクトリを一覧表示します。

mindepth 1.現在のディレクトリエントリをスキップしてください。その核心は-type l「シンボリックリンクである」という意味のと!次のテストを否定するという意味の組み合わせです。結合すると、シンボリックリンクではなくすべてのファイルと一致します。これはすべてのファイルとディレクトリを再帰的に一覧表示しますが、シンボリックリンクは表示しません。

ディレクトリではなく通常のファイルのみを希望する場合:

find . -type f

他のすべてのディレクトリを繰り返し含めるのではなく、このディレクトリの直接サブディレクトリのみを含めます。

find . -mindepth 1 -maxdepth 1

これらのテストと他のテストを組み合わせて、目的のファイルのリストを取得できます。

grep使用しているテストに一致する各ファイルに対して特定のタスクを実行するには、以下を使用します-exec

find . -type f -exec grep -H 'some pattern' '{}' +

'{}'ファイルに置き換えられます。これは、コマンドが完了したことを知らせるために必要+です。findこのオプションは、-H一致する単一のファイルとして実行されていても、grepにファイル名を表示するように強制します。

おすすめ記事