1. 基本语法
xargs [选项] [命令]
-
-0, --null:使用null字符(\0)作为输入项的分隔符。这在处理包含空格、换行符等特殊字符的文件名或路径时特别有用。
-
-I{}:指定替换字符串,其中{}将被替换为输入行的内容。这个选项允许你自定义一个字符串来替换从标准输入读取的参数。
-
-n NUM:指定每次传递给命令的参数个数。这个选项可以控制每次执行命令时传递的参数数量。
-
-P max-procs:指定并行执行命令的最大进程数。这个选项可以加速处理大量数据的任务。
-
-t, --verbose:在执行命令之前打印命令的详细信息。这有助于调试和了解xargs命令将执行的具体操作。
-
-d DELIMITER:自定义输入数据的分隔符。默认情况下,xargs使用空白字符(空格、制表符、换行符)作为分隔符。
-
-r, --no-run-if-empty:如果没有输入数据,则不执行命令。这个选项可以防止在没有输入数据的情况下执行不必要的命令。
-
-a file:从文件中读取输入行。这个选项允许你指定一个文件作为输入源,而不是从标准输入读取数据。
2. 常见用法
# 删除编译的文件
alias clean_core_dumps="fd -I 'core[.][0-9]+' /home/$(whoami) /remote/users/$(whoami) | xargs -I{} sh -c 'ls -lah {}; file{}; rm{}' "# 删除多个文件:
cat file_list.txt | xargs rm# 查找并处理文件:
find /path/to/directory -name "*.txt" | xargs grep "keyword"# 统计一个源代码目录中所有 php 文件的行数:
find . -type f -name "*.php" -print0 | xargs -0 wc -l# 结合find命令安全删除文件:
find . -type f -print0 | xargs -0 rm# 要将所有特定扩展名的文件转换为不同格式,可以使用以下命令:
find . -name '*.jpg' -print0 | xargs -0 -I {} convert {} {}.png# 复制所有图片文件到 /data/images 目录下,{}就是签名参数的别名,方便cp命令调用:
ls *.jpg | xargs -n1 -I{} cp {} /data/images# 查找所有的 jpg 文件,并且压缩它们:
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz# 自定义分隔符:
echo -e "a;b;c" | xargs -d ";" echo