2015-02-09 63 views
7

下面的命令:如何限制在bash中查找命令的結果?

find . -name "file2015-0*" -exec mv {} .. \; 

影響約1500的結果。他們一個接一個地移動上一個關卡。

如果我認爲結果不超過例如400?我怎麼能?

+2

如果有1500分的結果,其中有400應該選擇?即使採用確定性方式(例如按字母順序排列),也很難猜測哪些文件可能會被退回。你應該更廣泛地解釋你正在努力完成什麼。 – FatalError 2015-02-09 15:56:21

+0

嗨Fedorqui,謝謝你的回覆! – 2015-02-09 17:14:17

+0

嗨Fedorqui,謝謝你的回覆! 它沒有關係的順序,只有約400結果在一個時間。 這個想法是移動400個文件,因爲在上一個級別運行的另一個進程會降低其性能。 我的意思是,在這個例子中,將有四個部分的光榮舉動:400的第一個,400的第2個,400的第3個和第300個。 BR! – 2015-02-09 17:22:18

回答

8

你可以這樣做:

find . -name "file2015-0*" | head -400 | xargs -I filename mv filename .. 

如果你想模仿它做什麼用echo

find . -name "file2015-0*" | head -400 | xargs -I filename echo mv filename .. 
+0

優秀! 非常感謝你蒂亞戈! – 2015-02-09 17:28:19

+0

很高興幫助!如果您認爲這是最好的,請接受答案。 – Tiago 2015-02-09 17:34:25

+0

是的!我會接受它! 真的,我一直在尋找一個「查找」參數來停止它,當400結果發現好(像crtl C但單獨工作:))。 這種方式可以適用於大於1500的大量數據,並且對磁盤的訪問不會很密集。無論如何,今天爲1500它真的很好! BR Mariano – 2015-02-09 17:49:47

0

例如,您可以提供find輸出到while read循環並跟蹤與反:

counter=1 
while IFS= read -r file 
do 
    [ "$counter" -ge 400 ] && exit 
    mv "$file" .. 
    ((counter++)) 
done < <(find . -name "file2015-0*") 

注意,這可能導致問題,如果文件名包含新的生產線......這是不太可能。另外,請注意mv命令現在正在向上一級移動。如果你想讓它與dir的路徑相關,一些bash轉換可以實現它。