find&rm

Linux删除指令的使用_查找删除或保留特定的文件

Linux删除指令的使用_查找删除或保留特定的文件

解决问题可能不难,难的是你如何去发现这个问题,并用自己的语言描述这个问题,去查找问题的答案,讲真你如何去描述问题,或者去想比较巧妙地方法,能够极大程度提高你的工作效率,从而留下很多时间来取做别的事情,在别的方面有所进展,进一步缩短你的盲目时间。(一点小感悟,与下文无关)

以下指令已经完全经过笔者验证,大家可以放心使用

参考链接:https://blog.csdn.net/taiyang1987912/article/details/41488395

linux 查找并刪除:

找到当前目录下所有的以csv结尾的文件并把查找结果当做参数传给rm -rf命令进行删除(删除所有csv文件): 

1、find ./ -name '*.csv' |xargs rm -rf 

2、find ./ -name '*.csv' -exec rm -rf {} \; 

3、rm -rf $(find ./ -name '*.csv')

如果想指定递归深度,可以这样: 

1、find ./ -maxdepth 3 -name '*.csv' |xargs rm -rf 

2、find ./ -maxdepth 3 -name '*.csv' -exec rm -rf {} \; 

3、rm -rf $(find ./ -maxdepth 3 -name '*.csv') 

这样只会查找三层目录中符合条件的文件并删除掉! 

 

刪除除了要保留的txt文件以外的文件

1、删除除了1.txt以外的其他文件,这种方法比较简单

# shopt -s extglob      (打开extglob模式,注意这里一定要先运行这条,否则会报-bash: !: event not found)

# rm -fr !(1.txt)

如果是多个要排除的,可以这样:

# rm -rf !(1.txt|2.txt) 

或者也可以这样,删除除了txt以外的文件

rm -rf !(*.txt)

2、ls | grep -v *.txt | xargs rm #注意此种方式只能针对当前文件夹下的文件,不能指定文件目录,

例如 ls ./mytest/ | grep -v *.txt | xargs rm 就会报错rm: 2.csv: No such file or directory

说明: ls先得到当前的所有文件和文件夹的名字, grep -v keep,进行grep正则匹配查找keep,-v参数决定了结果为匹配之外的结果,也就是的到了keep之外的所有文件名,然后 xargs用于从 标准输入获得参数 并且传递给后面的命令,这里使用的命令是 rm,然后由rm删除前面选择的文件。

3、使用find命令代替ls,改进方法1从而能够处理指定文件夹的文件:

删除除了txt以外的所有文件

find ./ | grep -v *.txt | xargs rm -rf #-rf有没有都可以

find ./mytest/ | grep -v *.txt | xargs rm #删除当前mytest文件夹中txt文件之外的所有文件

说明,用grep而不用find -name选取名字,因为find选取名字时比较麻烦,对正则表达式支持不够,无法排除指定文件名。

4、find ./ -name '[^k][^e][^e][^p]*'  -exec rm -rf {} \;  #删除除了以keep开头的文件

find ./ -name '*[^t][^x][^t]' -exec rm -rf {} \; #删除除了txt以外的文件

find ./ -name '*.[^t][^x][^t]' -exec rm -rf {} \; #或者这样也可以

5、find ./ -name '[^k][^e][^e][^p]*'  | xargs rm -rf  #删除keep以外的其他文件

或者以后缀形式删除

find ./ -name '*.[^t][^x][^t]' | xargs rm -rf #删除txt以外的其他文件,注意^是代表除了的意思,也就是非,如果不加,就是删除所有的txt文件正好起到了相反的作用

 

rm删除除去指定文件的剩余所有文件  (rm 反向删除)

想删除除了包含字符串aa外所有的文件

rm `ls | grep -v "aa"`

zhou@zhou:~/LinuxC/file/test$ rm `ls | grep -v "aa"`

zhou@zhou:~/LinuxC/file/test$ ls

aaaaaaaa  aabb

简单的解释一下命令吧:rm 删除后面指定的文件

`ls | grep -v "aa" ` 记得外面是反引号(反引号的位置就在标准键盘的数字1的左边),

ls:查看当前目录下所有的文件,使用grep命令过滤一下grep -v "aa" 就是找出字符串中不带“aa”的。

上面的命令使保留带有“aa”串的文件,那如果我只想留下文件aa呢?很简单

zhou@zhou:~/LinuxC/file/test$rm `ls | grep -v "^aa$"` 或者 rm `ls | grep -v "aa$"`也一样的

在aa前面加上^,后面加上$表示结束符的意思,这个就是完全匹配了
————————————————
版权声明:本文为CSDN博主「dulingtingzi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dulingtingzi/article/details/88247932