2016-01-27 37 views
0

我有幾個文件的文件夾,主要是這3:呼應特定的文件,排除某些字符

vmware-diskmanager 
VMware-disklib.tar.gz 
vmware-disklib-distrib 

如果我想回應這兩個文件,而不擴展名爲.tar.gz,我可以使用

# echo v* 

但讓說,我有另外一個文件

VMware-disklib 

然後我可以使用

# echo [vV]* 

讓所有四個文件,但我能完成的東西,說:「不顯示以點的任何文件在裏面」的命令行?

回答

0

使用bash

如果你使用bash,看man bashEXPANSION>路徑名擴展>模式匹配

如果extglob外殼選項使用shopt內置啓用,幾個擴展的模式匹配操作符被識別。

(此選項似乎是默認的。)特別是你可以使用:

!(pattern-list):
匹配任何東西,除了給定的模式

所以你的情況這一個可以工作:

echo [vV]!(*.*) 

Wi th find

我使用zsh而不是bash,這是行不通的。 我沒有檢查羯羊有用於zsh的等效語法,我個人會去解決與find

find . -maxdepth 1 -iregex './v[^.]*' -exec echo -n "{} " \; 

其中:

  • .是要搜索的目錄
  • -maxdepth 1限制搜索當前目錄(無遞歸)
  • -iregex './v[^.]*'將大小寫不敏感的正則表達式應用於當前目錄中文件的整個路徑
  • -exec echo -n "{}"表示沒有LINEBREAK
  • \;需要結束-exec命令呼應的文件名(該名稱將取代{}佔位符)。

它應該打印您的文件的名稱與./在開始和沒有linebreak在最後。但從好的一面來說,你可以使用正則表達式。

0

您可以通過說「不要顯示任何帶有圓點的文件」來完成命令行。您需要在點之前轉義(使用反斜槓):

# echo [vV]* | grep -v "\." 
相關問題