shell命令xargs

今天准备找出nginx非空的日志并压缩成一个文件

find .  -name "meta.access.log.*" -type f -size +0k | tar -cjv -f log.tar.bz2

#tar: Cowardly refusing to create an empty archive(不成功)

于是想起一个一直疑惑的问题  ls 123.txt | tar ***  为什么失败

问学长  学长说pipe传递的是内容 tar... 需要的是参数(不支持标准输入流)  xargs可以将stdin收到的数据作为后面命令的参数

find . -name "meta.access.log.*" -type f  -size +0k | xargs tar -cjv -f log.tar.bz2

find . -name "meta.access.log.*" -type f -size +0k print0 | xargs -0 tar -cjv -f log.tar.bz2 (以NULL作为分界符)

 

find 还有一个exec参数

find . -name "meta.access.log.*" -type f -size +0k -exec tar -cjv -f log.tar.bz2 {} ;(不知道find / 为什么不可以)
原文地址:https://www.cnblogs.com/metasequoia/p/3753310.html