什么是xargs
xargs命令可以从标准输入中构建并执行命令。通俗一点来说就是,将一个字符串中分割出多个子字符串作为一个命令的参数,然后执行这个命令。
怎样使用xargs
默认情况下,xargs从标准输入中读取内容,用空格分割字符,然后作为参数去执行一个命令。下面的命令会从创建三个文件夹。
查看执行的命令
-t
参数会显示执行的命令,例如:
查看并确认执行的命令
-p
参数会询问同意后才会执行命令
xargs和find命令配合使用
find和xargs一起使用的含义是,通过find查询特定的文件,并对查找的结果进行一些操作,例如改文件的权限,移动文件等等。下面的命令是查询/tmp目录下早于两周前的文件并删除:
find /tmp -mtime +14 | xargs rm
xargs vs exec
find
命令中有个-exec
参数可以支持在查找的文件中进行任意的操作,如下的两个命令是等价的:
find ./foo -type f -name "*.txt" -exec rm {} \;
find ./foo -type f -name "*.txt" | xargs rm
建议使用xargs,效率更高
一次运行多个命令
之前都是将参数传递给一个命令执行,那么可以不可以将多个参数分别传递给同一个命令去处理呢?通过-I
参数实现,在参数后指定一个替换符号,xargs命令会将每个替换符号替换成参数后分别执行,下面就是调用三次mkdir命令创建三个文件夹了:
cat foo.txt
one
two
three
cat foo.txt | xargs -I % sh -c 'echo %; mkdir %'
one
two
three
ls
one two three