Grep
使用 ls 辨識文件後如何移動文件 |egrep 或 ’egrep’ 與 ‘find’
我需要將具有特定文件名字元串的所有圖像移動到特定目錄。
這是一個範例文件名
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'.