Linux常用命令行指令 - xargs
基础用法
xargs
指令默认情况下从 stdin
中读取信息,按照空格分或换行区分开,并且执行输入的命令(默认的命令是 /bin/echo
)。命令可以通过 xargs
的参数指定执行一次或多次,命令的执行参数为自身初始参数追加上由 stdin
读到的内容,命令在执行时会忽略空行。
xargs reads items from the standard input, delimited by blanks (which can be protected with double or single quotes or a backslash) or newlines, and executes the command (default is /bin/echo) one or more times with any initial-arguments followed by items read from standard input. Blank lines on the standard input are ignored.
在命令行输入 xargs
命令,输入 “a b c d” 后按回车,再按 ctrl+d
完成本次输入,则 xargs
的默认 echo
命令会将接收到的字符串打印出来,效果如下所示。
# xargs
a b c d
a b c d
xargs
单独使用时功能比较单一,但是它与其他指令一起使用十分强大。
xargs
与 find
组合使用
常见的使用方法是使用 find
指令找到指定的文件,组合以 xargs
指令实现对指定文件的操作。
find . -name "demo_" | xargs file -i
由于 xargs
是使用空格作为各个参数的分隔符,如果遇到的文件名中含有空格,则并不能按照预期处理。这时,可以使用 find
指令的 -print0
将含有空格的文件名转化为字符串,再结合 xargs
的 -0
参数就能完成文件名中含有空格的处理,改进后的命令如下。
find . -name "demo_" -print0 | xargs -0 file -i
xargs
与 grep
组合使用
常用命令如下,能够实现对指定规则文件的搜索匹配。
find . -name "*.log" | xargs grep error
使用 -n
参数让 xargs
的命令重复执行
如果想用 find
指令完成多个匹配规则的搜索,则可以使用 -n
参数将 xargs
的内容分割成多个。
下面的命令会执行3次 find
命令, xargs
会将接收的到的内容按照单词数为“1”分割,分3次传送给 find
指令。
echo "*.c" "*.cpp" "*.h" | xargs -n 1 find . -name
使用 -t
参数让 xargs
打印将要执行的命令
让 xargs
将指令的命令打印出来主要是方便查看命令执行情况,也方便在出现错误时进行调试。
find . -name *.log | xargs -t rm -f
使用 -p
参数让 xargs
在执行命令前询问用户
增加 -p
参数后, xargs
在每次执行命令前会将指令打印出来并询问用户,只有用户输入 “y” 时才会真正执行该条命令。
echo "*.c" "*.cpp" "*.h" | xargs -n 1 -p find . -name
使用 -I
参数让 xargs
进行参数替换
xargs
默认会将读取到的内容追加在指令命令后面作为参数,使用 -I
参数能够控制命令参数的组合方式。
以下命令会将当前目录中的可执行文件移动到bin文件夹下。
find . -executable -type f -print0 | xargs -0 -I {} mv {} ./bin