xargs-guide
xargs(eXtended ARGuments)是 Linux 系统中给命令传递参数的一个过滤器。
- 核心功能:它可以读取标准输入(stdin)、文件或管道输出,并将其转换为另一个命令的命令行参数。
- 解决痛点:许多 Linux 命令(如
echo,rm,mkdir等)本身 不支持直接从管道接收参数,xargs 充当了管道输出到命令参数的桥梁。
2. 常用参数及实例
Section titled “2. 常用参数及实例”2.1. -t:先打印命令后执行
Section titled “2.1. -t:先打印命令后执行”启用调试输出模式,在执行命令之前,先在标准错误输出上打印出即将执行的完整命令。
echo "file1 file2" | xargs -t touch# 输出:touch file1 file22.2. -n:指定每次执行的参数个数
Section titled “2.2. -n:指定每次执行的参数个数”限制每次命令调用时传递的参数最大数量。
假设 test.txt 内容如下:
a b c d e f gh i j k l m n使用 -n3 限制每次仅传递 3 个参数:
cat test.txt | xargs -n3输出结果:
a b cd e fg h ij k lm n2.3. -d:定义输入分隔符
Section titled “2.3. -d:定义输入分隔符”xargs 默认以换行符和空格作为定界符。使用 -d 参数可以指定自定义的定界符。
echo "nameXnameXnameXname" | xargs -dX输出结果(定界符 X 被替换为空格):
name name name name2.4. -I {}:参数占位替换
Section titled “2.4. -I {}:参数占位替换”使用指定的占位符(如 {})在后续命令的特定位置进行参数替换。这允许你在命令的中间部位插入参数,而不仅仅是追加在尾部。
假设 arg.txt 内容如下:
aaabbbccc执行如下命令:
cat arg.txt | xargs -I {} echo "Prefix -> {} -> Suffix"输出结果:
Prefix -> aaa -> SuffixPrefix -> bbb -> SuffixPrefix -> ccc -> Suffix2.5. -0:以 \0 (Null) 作为定界符
Section titled “2.5. -0:以 \0 (Null) 作为定界符”当文件名包含空格、换行符或特殊字符时,默认的分隔符会导致 xargs 错误切割文件名。此时必须配合 find 命令的 -print0 参数使用。
find . -type f -name "*.log" -print0 | xargs -0 rm -f