Grep

使用 ls 辨識文件後如何移動文件 |egrep 或 ’egrep’ 與 ‘find’

  • October 15, 2018

我需要將具有特定文件名字元串的所有圖像移動到特定目錄。

這是一個範例文件名

facility_92+SOURCE1+SOURCE1.0

在“facility_”之後可以有 1 到 5 位數字。

以下將返回我希望移動的文件列表:

ls | egrep "facility_([0-9]*)\+SOURCE[0-9]*"

但是,當我試圖移動任何返回的東西時,我會卡住。我嘗試使用 find 將匹配的文件移動到移動的文件夾:

for f in 'find ./ | ls | egrep "facility_([0-9]*)\+SOURCE[0-9]*"'; do mv $f moved/; done

但是我得到了一些錯誤,其中 mv 將條件解析為字元串……

我又使用了“-exec”:

find ./ | ls | egrep "facility_([0-9]*)\+SOURCE[0-9]*" -exec mv moved 

但是收到類似的錯誤…

建議表示讚賞。嘗試這種方法我錯了嗎?我應該弄清楚如何在“查找”中執行相同的正則表達式嗎?

find你不應該通過管道連接命令。

它有一個很好的-regex標誌,您可以將文件名匹配字元串傳遞給它:

find . -regextype egrep -regex ".*facility_([0-9]*)\+SOURCE[0-9]*.*" -exec mv {} DIRECTORY \;

最後\;傳遞每個匹配的文件名來mv代替{}.

如您所見,您需要.*在正則表達式的開頭和結尾使用,因為find需要在整個路徑上進行馬赫:

-regex pattern
      File name matches regular expression pattern.  This is a match on the whole path, not a search. For  example, to  match  a  file named './fubar3', you can use the regular expression '.*bar.' or '.*b.*3', but not 'f.*r3'.

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