使用 Bash 查找和复制文件 [重复]

Posted

技术标签:

【中文标题】使用 Bash 查找和复制文件 [重复]【英文标题】:find and copy file using Bash [duplicate] 【发布时间】:2010-12-06 10:25:28 【问题描述】:

任何人都有另一种在 bash 中查找和复制文件的方法,而不是:

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

我喜欢这种方式,因为它很灵活,因为我正在构建我的命令(可以通过任何命令)并在之后执行它。

还有其他方法可以将命令简化为文件列表吗?

谢谢

【问题讨论】:

类似问答 1+1/2 年后:***.com/q/5241625/1172302 【参考方案1】:

我建议使用find-exec 选项:

find . -ctime 15 <b>-exec cp ../otherfolder \;</b>

与往常一样,请查阅手册页以获得最佳结果。

【讨论】:

find 手册页建议在大括号周围使用单引号,因为没有它们可能会被误解。 您应该将\; 替换为+ 以避免每次都运行cp @BroSlow 不知道为什么,但这仅适用于 \;并且使用 + 我得到“-exec 缺少参数”。 如果所有文件都具有相同的名称 (im.png) 怎么办?重命名的时候能不能放到同一个目录下,比如im_1.png,im_2.png,im_3.png... @user234932 您需要使用另一种方式将目标传递给cpfind … -exec cp -t &lt;target_directory&gt; + 应该可以工作【参考方案2】:

我一般用这个:

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

【讨论】:

【参考方案3】:

您可以使用xargs

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

另见grep utility in shell script。

【讨论】:

这具有比find -exec 更快的优势,因为它不会为每个文件创建一个新的cp 进程。但是,如果你有 GNU find 你可以使用 find -exec ... + 而不是 find -exec ... ';' 来达到同样的效果:)【参考方案4】:

如果您的 cp 是 GNU 的:

find . -ctime 15 -print0 | xargs --no-run-if-empty -0 cp --target-directory=../otherfolder

【讨论】:

使用这个语法我得到cp: missing operand。如果我使用@andrey-vlasovskikh (-I -cp otherfolder) 提供的语法,我不会收到此错误。 更新了答案以涵盖这种情况(当find 没有输出时)。 我喜欢这个。我在查找后添加了| head -z -n 10 以限制我的结果。【参考方案5】:

将此用于复制和许多其他事情:

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

【讨论】:

前面不应该有$吗(find /apps -type f -name 'foo')?谢谢。【参考方案6】:

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

【讨论】:

这可能是对已接受回复的评论,也可能是您提到的每种方法的示例。

以上是关于使用 Bash 查找和复制文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Bash:查找包含特定字符串的文件并将它们复制到文件夹中

如何复制或删除bash中的特定行并将它们创建到新文件中[重复]

Linux_scp 远程复制多个文件时不需要重复多次输入密码怎么解决?复制命令都是写在bash内的

bash 无法从文本文件中找到目录 [重复]

在 Bash 中复制 CSV 列

在文件中查找重复行并计算每行重复了多少次?