我有一个生成像“Incoming11781Arp”这样的文件的程序,总是Incoming
,总有5个数字,但是有3个字母/大写/小写/数字/特殊情况_
以任何方式。与Incoming11781_pi
或Incoming11781rKD
一样。
如何使用从cron作业运行的脚本删除它们?我试过了 -
#!/bin/bash
file=~/Mail/Incoming******
rm "$file";
但它没有说没有匹配的文件或目录。
答案 0 :(得分:2)
您不得双引号变量引用以进行路径名扩展 - 如果这样做,则将通配符视为文字。
因此:
rm $file
警告:~/Mail/Incoming******
无法按照您的想法运作,并且可能与更多文件相匹配,因为它等同于{{ 1}},意味着 启动的任何文件与~/Mail/Incoming*
匹配。
要仅匹配以Incoming
开头且后面跟着正好为6个字符的文件,请使用Incoming
,正如@Jidder在评论中所建议的那样。
请注意,您可以使您的glob(模式)更具体:
~/Mail/Incoming??????
有关路径名扩展和模式语法的说明,请参阅file=~/Mail/Incoming[0-9][0-9][0-9][0-9][0-9][[:alpha:]_][[:alpha:]_][[:alpha:]_]
手册:http://www.gnu.org/software/bash/manual/bashref.html#index-pathname-expansion。
答案 1 :(得分:0)
使用find
命令...
$ directory='~/Mail/'
$ file_pattern='Incoming*'
$ find "${directory}" -name "${file_pattern}" -delete
前两行分别定义了目录和文件模式,find
命令将继续删除该目录中的所有匹配文件。