2013-05-07 37 views
0

說我有這個目錄中:使用bash查找如何忽略所有文件擴展名(如果存在)?

master3.txt 
master3 
master3old 
anotherFile 

,我需要使用find返回:

master3.txt 
master3 

基本上這意味着使用find如果存在忽略文件擴展名。這個例子中的關鍵是不返回「master3old」

我想在Mac OS X上使用find,所以我可以在結果上運行-exec cp

+0

是什麼'的要求爲主設備,new'?沒有返回? – 2013-05-07 23:39:04

+0

@Jonathan'master3-new'不能返回。 – chop 2013-05-08 02:44:52

回答

1
find $DIR -name "master3*" | grep "master3\>" | xargs 

其中$DIR是被搜索的目錄。 \>表示單詞的結尾。

+0

我在mac os 10.8上,不幸的是,上面沒有任何內容返回。 – chop 2013-05-07 23:47:49

+0

它適用於Mac OS 10.7。你可以嘗試用egrep替換grep,儘管它不重要。 – unxnut 2013-05-07 23:55:13

+0

值得注意的是,這也匹配'foo〜1'和'foo backup.txt'之類的東西,並且它不能複製其中包含空格的文件名。 – 2013-05-08 00:15:36

2

使用extglob:

shopt -s extglob 
cp master3?(.*) /somewhere 

它匹配master3任選隨後.something

+0

+1不錯。在很多情況下,bash的擴展globbing(和globstar(刪除需要調用查找。 – 2013-05-08 02:02:47

0

檢查發現手冊頁,看看它是否有-regex選項

find . -regex '.*/master3\(\..*\)?' 
+0

這並不適用於我的Mac OS 10.8,雖然有一個'-E'開關指向正則表達式... – chop 2013-05-08 04:25:30

相關問題