Bash 如何删除像';收入11781RKD';

Bash 如何删除像';收入11781RKD';,bash,Bash,我有一个程序正在生成这样的文件“Incoming11781Arp”,总是有传入的,总是有5个数字,但无论如何都有3个字母/大写/小写/数字/特殊大小写。如Incoming11781\u pi,或Incoming11781rKD 如何使用从cron作业运行的脚本删除它们?我试过了- #!/bin/bash file=~/Mail/Incoming****** rm "$file"; 但是说没有匹配的文件或目录失败了 对于要进行路径名扩展的变量引用,您不得使用双引号进行引用-如果使用双引号,则通

我有一个程序正在生成这样的文件“Incoming11781Arp”,总是有
传入的
,总是有5个数字,但无论如何都有3个字母/大写/小写/数字/特殊大小写
。如
Incoming11781\u pi
,或
Incoming11781rKD

如何使用从cron作业运行的脚本删除它们?我试过了-

#!/bin/bash
file=~/Mail/Incoming******
rm "$file"; 

但是说没有匹配的文件或目录失败了

对于要进行路径名扩展的变量引用,您不得使用双引号进行引用-如果使用双引号,则通配符将被视为文本。
因此:

注意事项
~/Mail/Incoming***
的工作方式与您认为的不一样,可能会匹配比预期更多的文件,因为它相当于
~/Mail/Incoming*
,这意味着任何以
Incoming
开头的文件都会匹配

要仅匹配以“
Incoming
开头并后跟6个字符的文件,请使用“
~/Mail/Incoming?????
”,正如@Jidder在注释中所建议的那样


请注意,您可以使glob(模式)更加具体:

file=~/Mail/Incoming[0-9][0-9][0-9][0-9][0-9][[:alpha:]_][[:alpha:]_][[:alpha:]_]

有关路径名扩展和模式语法的说明,请参阅
bash
手册:。

您可以使用
find
命令实现相同的效果

$ directory='~/Mail/'
$ file_pattern='Incoming*'
$ find "${directory}" -name "${file_pattern}" -delete

前两行分别定义目录和文件模式,
find
命令将继续删除该目录中的任何匹配文件。

rm~/Mail/Incoming*
不起作用?
rm~/Mail/Incoming????
您是否可以控制程序将文件放在何处?你可以把它们放在自己的文件夹里,然后让一个cron作业每晚删除它。你说的
可能是指
~/Mail/Incoming*
,因为它相当于~/Mail/Incoming******
@plootox:Whoopsie!是的,当然-谢谢你捕捉到了这一点。你的答案对于删除整个子树中的匹配文件非常有用,但是,这与OP的代码尝试执行的操作不同。
$ directory='~/Mail/'
$ file_pattern='Incoming*'
$ find "${directory}" -name "${file_pattern}" -delete