rm 通配符在 Raspberry Pi 操作系统上不起作用

rm 通配符在 Raspberry Pi 操作系统上不起作用

我有以下目录列表:

  0 -rw-r--r-- 1 root root      0 Sep  2 15:19 aws.greengrass.LambdaLauncher.log
  0 -rw-r--r-- 1 root root      0 Sep  2 15:19 aws.greengrass.LambdaRuntimes.log
  0 -rw-r--r-- 1 root root      0 Sep  2 14:53 aws.greengrass.Nucleus.log
 80 -rw-r--r-- 1 root root  75017 Sep  2 15:55 greengrass_2022_09_02_15_0.log
 40 -rw-r--r-- 1 root root  36930 Sep  2 16:50 greengrass_2022_09_02_16_0.log
216 -rw-r--r-- 1 root root 217065 Sep  2 20:40 greengrass_2022_09_02_20_0.log
 96 -rw-r--r-- 1 root root  92764 Sep  2 21:54 greengrass_2022_09_02_21_0.log
 64 -rw-r--r-- 1 root root  58307 Sep  2 22:57 greengrass_2022_09_02_22_0.log
 48 -rw-r--r-- 1 root root  46475 Sep  6 14:37 greengrass_2022_09_06_14_0.log
 16 -rw-r--r-- 1 root root  14845 Sep  6 17:57 greengrass_2022_09_06_17_0.log
 40 -rw-r--r-- 1 root root  39037 Sep  6 18:11 greengrass_2022_09_06_18_0.log
184 -rw-r--r-- 1 root root 186318 Sep  6 19:48 greengrass_2022_09_06_19_0.log
 12 -rw-r--r-- 1 root root  10793 Sep  6 20:25 greengrass_2022_09_06_20_0.log
124 -rw-r--r-- 1 root root 122363 Sep  6 21:43 greengrass.log

我想删除名称以 greengrass 开头的任何文件。我已经尝试过这些通配符命令,但它们都不起作用:

sudo rm /greengrass/v2/logs/greengrass*.*
sudo rm /greengrass/v2/logs/greengrass*
sudo rm /greengrass/v2/logs/greengrass*.log

我得到:

rm: cannot remove '/greengrass/v2/logs/greengrass*.*': No such file or directory

答案1

正在发生的一切都与全球扩张有关。

当你跑步时:

 sudo rm dir/*

运行 sudo 的 shell 尝试扩展“*”通配符。如果无法读取目录,则会将通配符按原样传递给 sudo。

sudo 执行rmwithdir/*并且 rm 不执行全局扩展,只有 shell 执行。 rm 正在寻找一个名为 的文件*,该文件是合法(但不寻常)的文件名。

如果运行 sudo 的用户可以读取该目录,则 acutall sudo 命令将为:

sudo rm dir/filea dir/fileb dir/filec

这会起作用的。由于您希望 root 进行全局扩展,因此您需要使用 shell,如下所示

sudo sh -c "rm dir/*"

然后 sudo 将以 root 身份运行 shell,这将运行命令“rm dir/*”,因为 shell 知道如何扩展 glob,那么它将变成“rm dir/filea dir/fileb ...”

答案2

您的普通用户可以读取目录 /greengrass/v2/logs 吗?如果没有,它会这样做,因为 shell 需要将通配符扩展为匹配文件列表(在将其传递给 之前sudo,后者将其传递给rm),并且如果 shell 无法列出目录的内容...那不会发生。

最简单的解决方案可能是sudo -s打开根 shell,然后rm /greengrass/v2/logs/greengrass*.*从该根 shell 运行。然后使用exit或 Control-D 退出 root shell 并恢复正常。

相关内容