用Linux命令行实现删除和复制指定类型的文件
(一)Linux 删除当前目录及子目录中所有某种类型的文件
方法1 : 此方法不能处理目录中带空格的那些。
rm -rf `find . -name "*.example"`
Linux的文件名(目录也是一种文件)不建议带空格,命令行中不好处理这个空格。
方法2:组合使用 find 及 xargs
find test2/ -name '*.example' |xargs rm -rf
(xargs 是给命令传递参数的一个过滤器,可以将前一个命令产生的输出作为后一个命令的参数。)
即将 find 产生的输出(test2 目录下的所有 example 类型文件),作为 rm 的参数,从而完全删除。
方法3: 组合使用 find 和 delete 命令
find . -name *.example -delete
此方法可以看作是对 方法2 的简化改进 。
(二)Linux 复制指定目录及子目录下特定类型的文件
首先建立一个用于测试的目录,目录中包含用于测试的 *.txt 文件和 *.tes 文件。
目标是保持当前的目录结构,只把 txt 文件复制出来。
方法1:当不需要的文件类型较为单一时,可以通过完全复制然后删除指定类型的文件完成
// Step1 使用如下命令,将测试目录 test 下所有内容完全复制到 test2 cp -r test/ test2
// Step2 组合使用find及xargs,将 *.tes 文件删除。 find test2/ -name '*.tes' |xargs rm -rf
适用场景举例:把项目文件备份,要去除其中的 .svn 文件,可以采用这种方式。
方法2:需要的文件为单一类型,带目录结构复制
这种情况下可以使用 tar 命令将指定类型的文件打包,然后解包。
// Step1 建立目录 test3 mkdir test3
// Step2 将指定类型文件带目录结构打包 find test/ -name '*.txt' |xargs tar czf test3.tgz
// Step3 解包到目录 test3
tar zxvf test3.tgz -C test3
适用场景:较为普遍,例如可以复制某个 Web 项目的所有 html/jsp/php 文件;或复制其他项目中特定类型的源文件。