Linux find和cp连用

场景:
拷贝指定目录下的部分文件到另外一个目录,如果是简单的前缀或者后缀匹配可以通过*.conf等类似的方式来操作,但是如果有更复杂的需求,比如排除一些文件,只拷贝文件,简单的cp已经不能胜任了,就需要配置find一起使用

两个命令连用,第一个想到的就是xargs,但是这里有点区别,xargs默认会把上一个命令的执行结果带入到下一个命令的末尾,这样在使用cp时就有问题了,举例说明:

1
2
3
4
> find /data/ -type f -name "*.txt" | xargs cp ./dist

# 实际结果是
> find /data/ -type f -name "*.txt" | xargs cp ./dist #{find的结果}

这样执行结果会报错,和预期是相反的

我们期望的是这样的

1
> find /data/ -type f -name "*.txt" | xargs cp #{find的结果} ./dist

这时就需要使用xargs的另外一个参数xargs -i,这个参数的意思是把上一个命令的执行结果保存到{}中,那么上面这个命令就可以改成

1
> find /data/ -type f -name "*.txt" | xargs -i cp -f {} ./dist

至此,find和cp连用就完成了~

当然也有其它方式,例如

1
> cp $(find /data/ -type f -name "*.txt") ./dist

JouyPub wechat
欢迎订阅「K叔区块链」 - 专注于区块链技术学习