Ls
忽略符號連結的目錄的 ls 內容
我有一個目錄,我想在其中列出所有內容(文件和子目錄)而不顯示符號連結。我在 Linux 上使用 GNU 實用程序。
ls
版本是 8.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)。
對於所述問題,您可以使用
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 顯示文件名,即使它碰巧與單個匹配文件一起執行。