搜索
写经验 领红包

liuxfid命令详解xags(liux中的fid的用法)

导语:Linux中的find 与 xargs用法

find是日常工具箱中功能强大、灵活的命令行程序之一。可以借助-exec或者-delete之类的参数,让它对找到的文件进行操作。find命令可以执行命令或者动作,find 可以借助选项-exec与其他命名进行结合。-exec算得上是find最强大的特性之一。

我们可以用管道将一个命令的stdout(标准输出)重定向到另一个命令的stdin(标准输入)。例如:cat 123.txt|grep 。但是,有些命令只能以命令行参数的形式接受数据,而无法通过stdin接受数据流。这种情况下,是没法用管道来提供那些只有通过命令行参数才能提供的数据。

xargs是一个很有用的命令(execute arguments),它擅长将标准输入数据转换成命令行参数。xargs能够处理stdin并将其转换为特定命令的命令行参数,xargs也可以将单行或者多行文本输入转换成其他格式,例如单行变多行或者多行变单行。单行命令是一个命令序列,各命令之间不使用分号,而是使用管道操作符进行连接。精心编写的单行命令可以更高效、更简捷地完成任务。需要具备扎实的理论和实践才能够写出适合的单行命令解决方法。

xargs就是构建单行命令的重要组件之一。xargs命令应该紧跟在管道操作符之后,它以标准输入作为主要的源数据流,并且使用stdin通过提供命令行参数来执行其他命令。例如:command|xargs。xargs可以作为一种替换方式,作用类似于find命令中的-exec参数。

find . -type f -name  -exec more {} \;

这里{}是一个特殊的字符串,与-exec选项结合使用。对于每一个匹配的文件,{}会被替换成相应的文件名。

-exec参数是以分号为结束标志的,考虑到各个系统中分号有不同的含义,所以前面加上反斜杠\;

在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。有些系统对能够传递给exec的命令长度有限制,这样find命令运行几分钟之后,就会出现溢出错误。

在find命令-exec参数中,我们无法在-exec参数中使用多个命令,它只能接受单个命令。不过可以耍一个小花招,把多个命令写入一个shell脚本中,比如command.sh。然后在-exec中使用这个脚本:

-exec ./command.sh {} \;find . -name  -exec rm {} \;find . -name |xargs rm {}

-exec

1.参数是一个一个传递的,传递一个参数执行一次rm

2.文件名有空格等特殊字符也能处理

3.find ...-exec rm {} \;因为rm是以类似for循环的方式去逐个处理的,没有类似xargs因为参数数量过多执行失败的情况。

-xargs

1.一次将参数传给命令,可以使用-n控制参数个数。xargs 会默认以-n为5000,即5000个参数一组。

2.处理特殊文件需要采用如下方式:

find . -name  print0 | xargs -0 rm {}

3.xargs是通过缓冲方式以前面命令行的输出作为参数,随后的命令调用该参数。优点是采用缓冲方式批处理数据,执行效率比较高。缺点是有可能参数数量过多(成千上万),导致后面的命令执行失败。

美丽山河

鼓励话语:博观而约取,厚积而薄发!

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小春创作整理编辑!