这个命令究竟做了什么?这是对的吗?

时间:2014-11-14 14:49:19

标签: bash find command

我在查看Bash脚本时发现了这个命令行!我的问题是这个命令是做什么的,这个命令是否正确?

    find / -name "*.src" | xargs cp ~/Desktop/Log.txt

3 个答案:

答案 0 :(得分:3)

.src中找到包含/扩展名的文件或目录,并将文件~/Desktop/Log.txt复制为查找结果' s

例如,如果find命令的输出是

file.src
directory1.src
file2.src 

xargs命令将执行cp ~/Desktop/Log.txt file.src directory1.src file2.src这没有任何意义。

答案 1 :(得分:2)

该命令是什么

find / -name "*.src"

说明:递归查找/中的所有常规文件,目录和符号链接,其文件名以.src结尾

|

说明:将stdout从管道左侧的命令重定向到右侧命令的stdin

xargs cp ~/Desktop/Log.txt

说明:构建一个cp命令,从stdin获取参数并将它们附加到命令末尾的空格分隔列表中。如果xargs(通常由ARG_MAX限定)的预定义缓冲区空间用尽,则将执行多个cp命令,

e.g。 xargs cp arg100 .... arg900可以cp a100 ... a500; cp a501 ... a900

处理

注意 cp的行为会因其参数的不同而有很大差异

  • 如果~/Desktop/Log.txt是唯一的参数,cp将抛出stderr
  • 如果cp的最后一个参数是目录
    • 所有前面的常规文件参数都将被复制到其中
    • 除了stderr之外,所有前面的目录都不会发生任何事情
  • 如果最后一个参数是常规文件
    • 如果cp有2个参数,第一个是普通文件。然后第二个参数文件的内容将被第一个参数的内容覆盖
    • 如果总共有2个以上的参数,cp会抛出一个stderr

总而言之,这里有太多的变量可以让您的命令行为真正被精确定义。因此,我怀疑,你想做别的事情。

应该是什么

我的猜测是该命令的作者可能想将stdout重定向到日志文件(注意每次运行命令时都会覆盖日志文件)

find / -name "*.src" > ~/Desktop/Log.txt

此外,如果您只是寻找具有.src扩展名的常规文件,您还应该将-type f选项添加到find

find / -type f -name "*.src" > ~/Desktop/Log.txt

答案 2 :(得分:0)

它找到与*.src中的模式/匹配的每个文件或目录。

然后将文件~/Desktop/Log.txt复制到上一个命令的每个结果。