在find命令中使用exec时出错

兆欧

要为Linux机器的所有用户删除所有电子邮件,我运行:

find /var/spool/mail/ -regextype sed -regex "^.*[^/]$" -exec :> {} \;

...但是我收到以下错误消息:

find: ‘:’: No such file or directory
find: ‘:’: No such file or directory
find: ‘:’: No such file or directory

怎么了?

库萨兰达

您似乎想截断所有用户的邮箱。您不能通过不是外部实用程序(它是Shell内置实用程序)中的as进行调用:执行此操作使用代替代替是可行的,因为通常可以作为外部命令使用,但是...find:true:

您也不能在通过执行的命令中使用重定向,-exec因为该重定向将在find实用程序首次启动时由外壳执行(对于每个找到的文件都不会一次)。

您的命令与

find /var/spool/mail/ -regextype sed -regex "^.*[^/]$" -exec : \; >{}

即,它将创建一个名为的文件{},标准输出流find被重定向到该文件中

相反,您可以做类似的事情

find /var/spool/mail -type f -exec sh -c '
    for pathname do
        : >"$pathname"
    done' sh {} +

作为“单线”:

find /var/spool/mail -type f -exec sh -c 'for pathname do : >"$pathname"; done' sh {} +

或者,如果所有邮箱都在下面/var/spool/mail

for pathname in /var/spool/mail/*; do
    : >"$pathname"
done

作为“单线”:

for pathname in /var/spool/mail/*; do : >"$pathname"; done

在这两种变体中,都将:正确调用实用程序,并且将为找到的每个路径名(给定搜索路径中或下方的任何常规文件)进行重定向。

有关的:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章