跳到主要内容

xargs 实战技巧

传递文件名

比如当前目录下有两个 7z 文件:

$ ls | grep 7z
TreeSizeFree-Portable.zip.7z
TreeSizeFreeSetup.exe.7z

我想实现的效果是直接使用管道命令进行解压,如下:

$ ls | grep 7z | 7z x -

显而易见,执行失败。原因是因为 7z 命令需要的是一个文件名,但是 - 是一个标准输入流(会将上一个管道的输出作为该管道的输入)。

这个时候可以尝试使用 xargs -I <占位符> 解决:

$ ls | grep 7z | xargs -I {} 7z x {}

xargs -I {} 将每个匹配的文件名替换到 {} 中,并执行 7z x {} 进行解压。

{}xargs 中的一个占位符,表示将匹配到的内容替换到它所在的位置。这里使用 {} 只是习惯使然,不是固定的符号。你可以使用其他任意字符来表示这个占位符。只要确保替换字符在命令中没有引起歧义即可,比如使用 @

$ ls | grep 7z | xargs -I @ 7z x @