0

我已经看到这个命令工作了很长时间:

find $dir -name $basename.[0-2][0-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-3][0-3][0-3] -exec rm -f {} \;

突然,它停止了工作。

我试图'在文件名之间加上单引号并且它工作了几天。然后我使用了双引号",它现在又可以工作了。

由于我没有在系统或帐户中发现任何更改(两者都在使用 ksh),您能否给出一个合理的理由,让这个停止工作没有明显的原因?

4

1 回答 1

2

变量周围应该有双引号,括号扩展周围应该有单引号。前者是为了保护文件名中的空格、制表符和换行符。后者是延迟括号表达式的扩展,以便find它代替外壳。您可能还需要在花括号周围加上双引号来保护空白。

find "$dir" -name "$basename".'[0-2][0-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-3][0-3][0-3]' -exec rm -f "{}" \;

它不起作用的原因很可能是当前目录中存在与括号表达式匹配的文件(不一定$dir)并导致它过早展开。

如果上述方法不起作用,请尝试在大括号周围不加引号。

于 2013-05-12T02:06:50.040 回答