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,欢迎访问。

posted @ 2020-10-25 20:25  蜗小牛yee  阅读(1819)  评论(0)    收藏  举报