1. 介绍
xargs 命令主要将管道输出的结果传递给另一个命令作为参数使用。通常用于处理大量文件、通过管道传递数据以及批量执行操作。
2. 常用选项
-d < delimiter >:指定数据的分隔符。
-n < number >:每次传递给命令的参数个数。
-L < number >:每次传递给命令的行数。
-t:打印命令,然后再执行。
-p:询问用户确认,然后再执行。
-I < replace-str >:指定替换字符串,用于在命令中指定参数位置。
-0:用空字符(null)作为分隔符,通常与 find -print0 一起使用,避免因为空格、换行等特殊字符引起的问题。
3. 使用示例
- 批量创建目录
可以使用 xargs 通过指定多个目录名,批量创建目录。
# 创建 dir1, dir2, dir3
echo "dir1 dir2 dir3" | xargs mkdir
- 删除指定文件
假设有一系列文件需要删除,可以使用 xargs 将文件名作为参数传递给 rm 命令。
# 将多个文件名传递给 rm
echo "dir1 dir2 dir3" | xargs rm -fr
- 使用 find 和 xargs(最常用)
结合 find 和 xargs 可以高效处理文件。使用 -print0 和 -0 选项可以处理包含特殊字符的文件名。一般用于定时删除日志文件或临时缓存文件。
# 删除当前目录及子目录中所有 .tmp 文件
find . -name "*.tmp" -print0 | xargs -0 rm
- 每次传递指定数量的参数
xargs 可以限制每次传递给命令的参数数量,这对避免参数过多导致命令失败非常有用。
# 每次传递 2 个文件名给 echo 命令
echo "f1 f2 f3 f4 f5 f6 f7 f8 f9" | xargs -n 2 echo
- 执行命令并确认
可以使用 -p 选项,要求在每次执行前进行确认。
# 先批量创建3个文件echo "file1 file2 file3" | xargs touch
# 删除文件前确认echo "file1 file2 file3" | xargs -p rm
- 使用替换字符串
可以指定替换字符串,用于在命令中指定参数位置。
# 先批量创建3个文件
echo "file1 file2 file3" | xargs touch
# 对 file1, file2, file3 运行 `echo "processing"` 命令
echo "file1 file2 file3" | xargs -I {} echo "processing {}"