CentOS 7系统中利用find命令删除、移动、复制文件的几种方法
------------恢复内容开始------------
这里简单总结几种在CentOS 7中利用find命令删除、移动、复制文件的几种方法。
在/snailYee目录中,创建几个文件,如图所示。

一、删除/snailYee目录下,所有以".txt'结尾的文件。
方法一:find /snailYee/ -type f -name "*.txt" -delete
运行效果:
注意:delete参数前,是-,而不是--。
方法二:find /snailYee/ -type f -name "*.txt" -exec rm -f {} \;
运行效果:
说明:-exec参数,是将前面find运行的结果,一条一条地放入后面命令的中括号中进行执行。因为是一条一条地执行,不是一起执行,所以每条命令之间应该加分号,分号前要用转义符\进行转义。
方法三:find /snailYee/ -type f -name "*.txt" | xargs rm -f
运行效果:
说明:管道符|的作用是将前面命令的结果交给后面一条命令处理 。在该条命令中,管道符前面的find命令,找出了/snailYee目录下,全部以".txt"结尾的文件。find命令将结果交给后面的rm命令执行。但是find命令查找出来的结果,是以行展示出来的,即
,以这种形式交给后面的rm命令,rm命令没法处理,所以,必须将find命令的结果用xargs命令转换成一行。即,最后转换成的形式为rm -f /snailYee01.txt /snailYee02.txt /snailYee03.txt /snailYee04.txt /snailYee05.txt。注意这个和方法二的区别,方法二是将find命令的结果,一条一条地交给rm命令执行,因此每条命令之间必须有分号,而管道符是将find命令的结果一次性全部交给rm命令执行,每条结果之间是一个空格。
xargs命令的主要作用主要是将结果内容从行转换为列。如在/tmp目录中创建了一个snailYee.txt文件,其内容为:

用xargs命令,可以将文件转换为:

xargs命令加参数还可以:


即每行显示2个或3个。
方法四:rm -f `find /snailYee/ -type f -name "*.txt"`
运行效果:
说明:反引号的作用,是将引号中命令运行的结果交给引号外的命令执行。
方法五:rm -f $(find /snailYee/ -type f -name "*.txt")
说明:$()和反引号``的作用一样。
二、复制/snailYee目录下,所有以".txt'结尾的文件。
按照前面删除命令的方法,可以有以下几种方法。
方法一:find /snailYee/ -type f -name "*.txt" -exec cp {} /tmp \;
方法二:cp `find /snailYee/ -type f -name "*.txt"` /tmp
方法三:cp $(find /snailYee/ -type f -name "*.txt") /tmp
方法四:利用管道符和xargs命令操作
注意:此处不能直接用find /snailYee/ -type f -name "*.txt" | xargs cp /tmp。因为前一个命令,通过管道符|将命令交给后一个命令时,结果自动补充在最后面,即实际后半段这个命令是cp /tmp /snailYee01.txt /snailYee02.txt /snailYee03.txt /snailYee04.txt /snailYee05.txt。命令实际是错误的。
要解决这个问题,有2个解决方法,一是将xargs转化出的内容,插入到cp和/tmp中间位置;二是知名复制的目的文件夹时/tmp。
第一种方法:find /snailYee/ -type f -name "*.txt" | xargs -i cp {} /tmp
在xargs 后加入参数-i,代表将xargs输出的内容插入到后面的花括号{}中。
第二种方法:find /snailYee/ -type f -name "*.txt" | xargs cp -t /tmp
在cp命令后面加入参数-t (t==target),说明复制的目标文件夹是/tmp。
因技术不断更新,同时个人知识水平有限,博客内容可能根据作者理解不同不断更新,最新博客内容地址https://i.cnblogs.com/yangcotuan,欢迎访问。

浙公网安备 33010602011771号