2014-10-30 120 views

回答

1

試試以下find命令,該命令在要存儲要移動的文件的目錄中使用sed正則表達式。

find . -regextype sed -regex ".*/[a-zA-Z0-9]\+\.jpg" -exec mv "{}" /path/to/destination \; 

OR

find . -regextype sed -regex ".*/[^._]\+\.jpg" -exec mv "{}" /path/to/destination \; 

更新:

mv $(find . -name "*.jpg" -type f | grep -P '^(?!.*_\d+\.jpg).*') /path/to/destination 
+0

好吧,我沒描述得很好。有很多文件,如b.jpg b_258.jpg b_6693.jpg,789c.jpg 789c_77885.jpg 789c_14.jpg,什麼意思是隻找到a.jpg b.jpg,789c.jpg ...沒有任何「 {NO。}「,並將它們移動 – Tomo 2014-10-30 03:45:34

+0

添加到問題中。 – 2014-10-30 03:46:12

+0

@Tomo試試我的更新。 – 2014-10-30 03:53:27

1

只有當你不知道在哪裏a.jpg是,只有當你知道只有一個a.jpg

find . -type f -name "a.jpg" -exec mv "{}" /anotherfolder \; 
0

要使用正則表達式做到這一點,你會做這樣的事情:

find /basefoldertosearch -regex '.*/a\.jpg' -exec mv "{}" /anotherfolder \; 

注:該模式的整個路徑,而不僅僅是文件名匹配。第一個點在它之前沒有「\」,將匹配任何東西(並且由於星號的原因,任何數目的)。 「。」在文件名中,因爲它之前有一個「\」,所以會匹配一個點。所以,這個模式將匹配以「/a.jpg」結尾的任何路徑+文件名。由於這包括'*',它必須被引用。

此外,由於您知道確切的文件名,您可以搜索特定的文件名。

find /basefoldertosearch -name a.jpg -exec mv "{}" /anotherfolder \; 

請注意,這不包括路徑。這也不是一個正則表達式;它會搜索與指定的文件名完全相同的文件名。在這種情況下,由於它沒有''(而''實際上不起作用),所以不需要引用它。

請注意,如果其中任何一個找到多個匹配項,它會將它們全部逐一複製到相同的目的地;每個將覆蓋前一個,並且您將留下它找到的最後一個文件。

補充:閱讀下面的意見後,或許這就是你正在尋找:

find /basefoldertosearch ! -regex '.*[0-9].*' -type f -exec mv "{}" /anotherfolder \; 

這會發現一切不(因爲!)的匹配正則表達式:任何字符.*,其次由數字[0-9]後跟其他任何字符.*。然後從列表中刪除任何不是正常文件(例如導演)(否則您將移動/basefoldertosearch,並且找不到任何剩餘的東西!)

+0

好的,我沒有很好地描述,有很多文件,比如b.jpg b_258.jpg b_6693.jpg,789c.jpg 789c_77885.jpg 789c_14.jpg,什麼意思是隻找到a.jpg b.jpg,789c .jpg ...沒有任何「_ {NO。}」,並且將它們移動 – Tomo 2014-10-30 03:47:02

+0

我的英語很差,對不起,也許我沒有描述clea找到沒有任何後綴的文件「_Numbers.jpg」 – Tomo 2014-10-30 03:50:17