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