昨天从git 上clone一份solution下来,由于solution本身是VS2005的,然后我用VS2015打开后,这样每个子工程底下都会主动产生一个*.vcxproj的文件(vs2015的工程文件)。接下来我想切换代码分支,但是git提示,必须提交或者删除所有的.vcxproj才可以。使用find命令查找.vcxproj结尾的文件:
find ./ -type f -name "*.vcxproj"
结果是输出了十几个工程目录底下都有.vcxproj结尾的文件。一个一个删除实在是麻烦。这时候find + exec就派上用场了,先上解决方案再解释:
find ./ -type f -name "*.vcxproj" -exec rm {} \;
使用上述命令就可以将当前目录及子目录下所有的以.vcxproj结尾的文件全部找出并且删除。
find + exec 解释
find ./ -type f -name "*.vcxproj"
在上述命令中,./指的是当前的搜索目录,-type f指的是搜索文件,-name "*.vcxproj"指的是搜索以.vcxproj结尾的文件。这个命令会递归查找出当前目录和字目录下的所有文件。如果你只要查找当前文件夹不查找子文件夹的话可以加个搜索深度,如只搜索当前的目录(不包含子目录):
find ./ -maxdepth 1 -type f -name "*.vcxproj"
-exec rm {} \;
-exec后面跟的是command命令,这个命令是以‘;’作为结束标志的,所以分号是不可缺少的。考虑到各个系统中分号会有不用的意义,所以前面加反斜杠。
{}花括号代表前面find找出来的文件名
find结合exec和command非常好用,command可以用例如ls -l列出文件详情; mv 移动文件;grep 搜索文件中的字符串;cp 复制文件等等。