Shell

ls:在萬用字元搜尋中不顯示匹配相同模式的目錄,只顯示文件

  • October 7, 2013

假設我有類似以下的情況,典型的商用 PC 情況:

drwxr-xr-x 1 whatever whoever       3 Oct  3 16:40 invoices2009
drwxr-xr-x 1 whatever whoever       4 Oct  3 16:40 invoices2010
drwxr-xr-x 1 whatever whoever       2 Oct  3 16:40 invoices2011
-rwxr-xr-x 1 whatever whoever  440575 Oct  3 16:40 tax2010_1
-rwxr-xr-x 1 whatever whoever  461762 Oct  3 16:40 tax2010_2
-rwxr-xr-x 1 whatever whoever  609123 Oct  3 16:40 tax2010_3

現在讓我們偷懶,只需輸入:

$ ls -l *2010*

假設 invoices2010 目錄中有內容,它不會按預期工作。由於目錄名稱也包含2010年,ls因此還將列出invoices2010中的文件,儘管我只想列出目前目錄中的文件。更有趣的是:想像一下 tax2010* 文件根本不存在,也沒有範例中的這三個目錄,而是其中的 50 個。是的,我已經嘗試過了:ls甚至不會指出哪些文件在哪個目錄中,而只是從上到下列出它們,就像所有文件都駐留在目前目錄中一樣(除非您明確指定-R選項,我當然知道)

另外,我知道我也可以用 來做到這一點find,但是還有什麼方法可以用一個簡單的單行程式碼來完成這個任務ls(顯然,它的語法要簡單得多)?

看起來您的問題是“如何按模式列出文件,不包括ls僅包含目錄的目錄”。

沒有辦法用 pure 來做到這一點ls。您可以組合ls+grep喜歡:

ls -ld *2010* | grep -v '^d'

但是,使用它要好得多find

find . -maxdepth 1 -type f -name "*2010*"

ls -dlp *2010*將是解決方案的良好開端,但這取決於您希望輸出的外觀。

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