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