zoukankan      html  css  js  c++  java
  • inux反选删除文件

    最简单的方法是

    # shopt -s extglob      (打开extglob模式)
    # rm -fr !(file1)
     

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

    # rm -rf !(file1|file2) 

    Linuxrm删除指定文件外的其他文件方法汇总

    一、Linux下删除文件和文件夹常用命令如下: 删除文件: rm file
    删除文件夹: rm -rf dir
    需要注意的是, rmdir 只能够删除 空文件夹。 二、删除制定文件(夹)之外的所有文件呢?
    1、方法1,比较麻烦的做法是:
    复制需要保留的文件到其他文件夹,然后将该目录删除, 然后将需要保留的移动 回来。 mv keep ../ #保留文件(夹) keep
    rm -rf * #删除当前文件夹里的所有文件 mv ../keep ./ #将原来的东西移动回来
    2、方法2,需要在当前文件夹中进行:
    rm -rf !(keep) #删除keep文件之外的所有文件
    rm -rf !(keep1 | keep2) #删除keep1和keep2文件之外的所有文件
    3、方法3,当前文件夹中结合使用grep和xargs来处理文件名: ls | grep -v keep | xargs rm #删除keep文件之外的所有文件
    说明: ls先得到当前的所有文件和文件夹的名字, grep -v keep,进行grep正则匹配查找keep,-v参数决定了结果为匹配之外的结果,也就是的到了keep之外的所有文件名,然后 xargs用于从 标准输入获得参数 并且传递给后面的命令,这里使用的命令是 rm,然后由rm删除前面选择的文件。
    好处:使用了grep来正则表达式来匹配文件名字,可以一次保留多个文件,从而进行更加准确的处理。
    4、方法4,使用find命令代替ls,改进方法3从而能够处理制定文件夹的文件:
    find ./test/ | grep -v keep | xargs rm #删除当前test文件夹中keep文件之外的所有文件
    说明,用grep而不用find -name选取名字,因为find选取名字时比较麻烦,对正则表达式支持不够,无法排除指定文件名。
    5、方法5,直接使用find命令删除其他文件:
    find ./ -name '[^k][^e][^e][^p]*'  -exec rm -rf {} ; #删除keep以外的其他文件。 find ./ -name '[^k][^e][^e][^p]*'  | xargs rm -rf  #删除keep以外的其他文件。推荐!
    说明:上面第二行的代码效率高些,原因在于删除多个文件时 -exec会启动多个进程来处理,而xargs会启动一个rm进程来处理。
    关于find 执行命令的效率和借用xargs启动的命令效率的比较,详情请参考:http://www.linuxsir.org/main/?q=node/137
    Linux文件查找命令find,xargs详述  http://www.linuxsir.org/main/?q=node/137 本文转载自:http://blog.sina.com.cn/s/blog_70ffb5c501011rrk.html

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

    zhou@zhou:~/LinuxC/file/test$ ls
    1  23sdfwe 88888888  aabb ag   ghdda    mmm
    2 3       aaaaaaaa abc  asdg  llllllll wwwww
    zhou@zhou:~/LinuxC/file/test$

    然后我想删除除了包含字符串aa外所有的文件,也就是想留下aabb,aaaaaaaa,这两个文件,其他的全部删除
    下面是我的命令:

    zhou@zhou:~/LinuxC/file/test$ rm `ls | grep -v"aa"`
    zhou@zhou:~/LinuxC/file/test$ ls
    aaaaaaaa  aabb
    zhou@zhou:~/LinuxC/file/test$
    所以了,成功了。
    简单的解释一下那条命令吧:rm 删除后面指定的文件
    `ls | grep -v "aa" ` 记得外面是反引号(反引号的位置就在标准键盘的数字1的左边),
    ls:查看当前目录下所有的文件,使用grep命令过滤一下grep -v "aa" 就是找出字符串中不带“aa”的。

    整体再顺一下:列出文件名不带“aa”串的文件,然后删除他们。OK。
    其实说起来简单,当时我也做了好长时间,因为以前没怎么接触grep,因此一开始我想到的办法是使用正则表
    达式,但是在做的过程中突然发现了grep使个不错的东西,因此就使用了。

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

    zhou@zhou:~/LinuxC/file/test$rm `ls | grep -v"^aa$" `
    在aa前面加上^,后面加上$表示结束符的意思,这个就是完全匹配了。
    好了,就这么多。但愿以后能用到这个有用的命令
    转自:http://blog.sina.com.cn/s/blog_67e34ceb01014930.html

    linux 删除其他文件

    http://zhidao.baidu.com/link?url=uvHfrb3kSnM_8p5ILhZyc39U0h3md-Ncrm3iaygeYTLU-zjthNBlqO674VulVGTnPiNcl2nj7wo5vn08N4481_

    求教 linux centos我想删除某目录中文件名不符合"*20100330*"这样规则的文件应该怎么删除?

    假设目录名为myTest且为当前目录的下一级目录,使用如下命令即可:
    cd ./myTest && rm `ls | grep -v '20100330'` && cd ..
    
    进入myTest目录,删除文件后返回当前目录。
    
    grep的-v参数表示反向选择。
    
    一般使用rm删除文件的时候会有确认提示,如果不要确认,直接强制删除,可以使用rm的-f参数。
    

    其他1条回答

    find ./ -type f ! -name "*20100330*" -exec rm -rf {} ;

    如何反向选择文件并删除

    http://bbs.csdn.net/topics/390077765

    案例:一个文件夹下我想删除 除了abc文件 之外的所有文件,命令怎么写(linux下)

    find . -maxdepth 1 -type f -not -name 'abc' -exec rm '{}' ';'

    ls | grep -v abc | xargs -i rm -rf {}

    rm -f `ls | grep -v abc`
    如果文件很多的情况下,不要用这种方法……
    要用2楼的方法……

    mv abc /tmp
    rm *
    mv /tmp/abc .

    反向显示文件

    使用ls命令仅仅显示当前目录不包括.的文件.

    ls加grep过滤的方式:ls -al | grep -v '.'(ls --ignore=.* -al也可实现)。

    在打开extglob模式下(缺省是打开的),ls也可以实现,而且更加灵活.

    shopt -u extglob #关闭
    shopt -s extglob #打开

    ls -al !(*.*)
    ls -al -d !(*.*)

  • 相关阅读:
    Binary Search Tree Iterator 解答
    Invert Binary Tree 解答
    Min Stack 解答
    Trapping Raining Water 解答
    Candy 解答
    Jump Game II 解答
    Implement Hash Map Using Primitive Types
    Gas Station 解答
    Bucket Sort
    HashMap 专题
  • 原文地址:https://www.cnblogs.com/surplus/p/14763308.html
Copyright © 2011-2022 走看看