linux 管道来删除,[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 中的反引号,单引号,双引号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值