Shell
ls:在萬用字元搜尋中不顯示匹配相同模式的目錄,只顯示文件
假設我有類似以下的情況,典型的商用 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*
將是解決方案的良好開端,但這取決於您希望輸出的外觀。