Ls

忽略符號連結的目錄的 ls 內容

  • August 8, 2018

我有一個目錄,我想在其中列出所有內容(文件和子目錄)而不顯示符號連結。我在 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 顯示文件名,即使它碰巧與單個匹配文件一起執行。

引用自:https://unix.stackexchange.com/questions/141480