2009-10-13 60 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;