ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 概述 大多数命令都不接受标准输入作为参数,只能直接在命令行输入参数,`xargs`命令的作用,是将标准输入转为命令行参数 1. xargs的默认命令是echo,空格是默认定界符 2. 将单行或多行文本输入转换为其他格式 3. xargs 相等于**循环**把前面管道的内容当作 xargs 后面的命令最后的参数 ## 参数 ``` -0, --null 各个项目由 null(空字符,不是空白字符)分隔; 同时停止对引用和反斜杠转义的处理及对逻辑 EOF 的处理 -a, --arg-file=文件 从指定<文件>读取参数,不使用标准输入 -d, --delimiter=分隔用字符 输入流的各个项目使用指定<分隔用字符>进行分隔, 不使用空白字符;同时停止对引用和反斜杠转义的 处理及对逻辑 EOF 的处理 -e, --eof[=终止符] 在指定<终止符>的情况下与 -E <终止符> 等效; 否则,视为文件末尾终止字符串不存在 -I R 和 --replace=R 相同 -i, --replace[=R] 将<初始参数>中的 R 替换为从标准输入读取的 名称;如果未指定 R,则假定其为{} -L, --max-lines=最大行数 每个命令行使用最多<最大行数>行的非空输入行 -l[最大行数] 类似 -L,但在没有给出<最大行数>信息时默认为接受 最多一行非空输入行 -n, --max-args=最大参数数量 设置每个命令行可使用的<最大参数数量> -o, --open-tty Reopen stdin as /dev/tty in the child process before executing the command; useful to run an interactive application. -P, --max-procs=MAX-PROCS 同时运行至多<MAX-PROCS>个进程 -p, --interactive 运行命令前提示 --process-slot-var=VAR 在子进程中设置环境变量<VAR> -r, --no-run-if-empty 如果没有指定任何参数,则不运行指定的<命令>; 如果未给出该选项,指定的<命令>将至少运行一次 -s, --max-chars=最大字符数 限制命令行长度的<最大字符数> --show-limits 显示命令行长度的限制 -t, --verbose 执行命令前输出命令内容 -x, --exit 如果大小(见 -s)超出限制则退出 --help 显示此帮助信息并退出 --version output version information and exit ``` ### -d 指定分隔符 ``` > echo -e "a\tb\tc" | xargs -d "\t" echo a b c ``` ### -p ,-t 询问输出 - -p参数打印出要执行的命令,询问用户是否要执行 - -t参数则是打印出最终要执行的命令,然后直接执行,不需要用户确认 ``` $ echo 'one two three' | xargs -p touch touch one two three ?... ``` ### -print0 与 -0 (测试无效,使用 -n) 由于xargs默认将空格作为分隔符,所以不太适合处理文件名,因为文件名可能包含空格。 find命令有一个特别的参数 `-print0`,指定输出的文件列表以null分隔。然后,xargs命令的`-0`参数表示用null当作分隔符 如: ``` find /path -type f -print0 | xargs -0 rm ``` ### -n 一次执行n行 `-n`参数指定每次将多少项,作为命令行参数 ``` > echo "one two three four" | xargs -n 2 echo one two three four > echo "one two three four" | xargs -n 1 echo one two three four ``` ### -i 指定参数位置 ``` > ls 1.txt 2.txt 3.txt log.xml > ls *.txt |xargs -i mv {} {}.bak mv 1.txt 1.txt.bak mv 2.txt 2.txt.bak mv 3.txt 3.txt.bak ``` ## 示例 ### 删除 指定天数天数以前的文件 ``` find /xxx -type f -ctime +360 | xargs -t -n1 rm -rf ``` ### 查找所有的jpg 文件,并且压缩它们 ``` find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz ``` ### xargs下载所有链接 `cat url-list.txt | xargs wget -c `