• [linux]——利用管道删除文件


      例:如果一个文件夹里面有文件(text1 text2 text2 测试1 测试2 测试3)如果你想删除文件夹下的测试1,测试2,测试3文件该怎么办呢?当然我们也可以cd到此文件夹下面rm每个文件,但是这样作的代价太大了,如果有上百个此类文件呢?那岂不是要执行一百次rm操作?

      正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。(百度百科)我们通常用正则表达式来把一类字符串归类;

      首先我们需要搜寻此文件夹下的所有文件,得到文件夹下所有的文件名,理所当然的使用ls指令了;用ls指令把文件夹所有的文件搜寻出来之后就开始搜寻你想要删除的那类文件了;

      然后我们开始分析我们需要删除文件有什么特性,你会发现我们删除的文件第一个字符是汉字,而不是英文字母,这就好办了;通常正则表达式 "a-z“ 用来表示从a到z的字符,"A-Z"表示从A到Z的字符;如果表示非字符呢?理所当然的用“^”来表示非逻辑了。所以 [^a-zA-Z]即是表示非字符了。如果你用此正则表达式来搜寻你不会得到你想要的结果的,因为你没有指明该非字符的位置,也就是说 [^a-zA-Z] 表示任意位置不为字符都可以被列出来;正则表达式中 "^" 也可以用来表示行首,"$"用来表示行尾,我们在[^a-zA-Z]前加上一个^字符即可。即:ls | grep '^[^a-zA-Z]'  (grep是用来搜寻字符串的命令)

      最后一步删除查到的文件,可能我们首先想到是  ls | grep '^[^a-zA-Z]'  | rm -r ,这种想法思路或许没有问题,但是为什么会提示未找到操作符错误呢?这个我也不知道为什么,在网上查了一下说使用  “xargs”即可,它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题(百度百科)。执行 ls | grep '^[^a-zA-Z]' | xargs rm  即可以删除文件了,但是有一个缺点就是删除的时候并不提示是否确定删除,不过对于大量的文件删除没必要确认删除了;

      还有一个办法就是使用反引号 ` 此符号位于tab键上方,此符号的功能是替换,把一个命令的标准输出插在一个命令行的任何位置;so      rm -r ` ls | grep '^[^a-zA-Z]' `  依然可以达到想要的效果。需要注意的是grep后面的单引号 ' '是为了忽略所有的特殊字符;详细内容见[linux]——Linux Shell 中的反引号,单引号,双引号

  • 相关阅读:
    SED&AWK
    load average[zhuan]
    To be learned
    Android计时器 android.widget.Chronometer
    Play初识
    获取视图的宽高
    自定义摄像机
    Android VideoView使用小记
    在android中,如何去掉webview读取网页后点击网页上的按钮出现的方框
    阿里云主机试用之自建站点和ftp上传所遇的2个问题
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/3077342.html
Copyright © 2020-2023  润新知