2009-10-13 45 views
26

任何人有在bash比發現和複製文件的另一種方法:擊:找到並複製

find . -ctime -15 | awk '{print "cp " $1 " ../otherfolder/"}' | sh

我喜歡這種方式,因爲它是靈活的,因爲我建立我的命令(可通過任何命令),然後執行它。

是否有其他方法可以簡化命令到文件列表?

感謝

+1

類似的Q&A 1 + 1/2年後:http://stackoverflow.com/ q/5241625/1172302 – 2012-08-15 04:27:54

回答

62

我會建議使用find-exec選項:

find . -ctime 15 -exec cp {} ../otherfolder \;

與往常一樣,請以獲得最佳效果的聯機幫助頁。

+0

查找手冊頁建議在大括號周圍使用單引號,因爲它可能會在沒有它們的情況下被誤解。 – 2010-05-15 05:59:59

+4

您應該用'+'替換'\;'以避免每次運行'cp'。 – BroSlow 2014-07-13 23:05:05

+3

@BroSlow不知道爲什麼,但這隻適用於\;和+我得到'失蹤參數爲'執行'。 – hayavuk 2016-01-07 15:57:20

8

我通常使用這一個:

find . -ctime -15 -exec cp {} ../otherfolder/ \; 
-1

-exec很可能要走的路,除非你有太多的文件。然後使用xargs。

4

你可以用xargs做到這一點:

$ find . -ctime 15 -print0 | xargs -0 -I{} cp {} ../otherfolder 

又見grep utility in shell script

+1

這比'find -exec'更快,因爲它不會爲每個文件創建一個新的'cp'過程。但是,如果你有GNU find,你可以執行'find -exec ... +'而不是'find -exec ...';''獲得相同的效果:) – hobbs 2009-10-14 07:18:54

8

如果您cp是GNU的:

​​
1

使用此用於複製和許多其他的事情:

for f in (find /apps -type f -name 'foo'); do cp ${f} ${f}.bak; cmd2; cmd3; done;