要为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] 删除。
我来说两句