我目前正在尝试从根目录中删除大量文件。大约有110个文件几乎完全相同的文件名。
文件名显示为wp-cron.php?doing_wp_cron=1.93
,其中93是1-110中的任何整数。
但是,当我尝试运行代码:sudo rm /root/wp-cron.php?doing_wp_cron=1.*
时,它实际上会尝试在文件名中找到带有星号*
的文件,这样我就会发现找不到文件错误。
使用通配符表示法删除一系列文件的正确表示法是什么?
注意:我已尝试使用单个'
和双引号"
分隔文件路径。这没用。
对此事的任何想法?
答案 0 :(得分:3)
使用ls -ld /root
查看/ root目录上的权限,通常非root用户不具有r-x权限,这将不允许他们读取目录列表。
在命令sudo rm /root/wp-cron.php?doing_wp_cron=1.*
中,文件名扩展尝试发生在非root用户下运行的shell中。由于您没有读取/ root权限,因此无法扩展到单个文件名。
然后shell执行sudo\0rm\0/root/wp-cron.php?doing_wp_cron=1.*\0
。 (三个独立的,明确的论点)。
sudo
,在满足条件后,执行rm\0/root/wp-cron.php?doing_wp_cron=1.*\0
。
rm
会运行并尝试取消链接文字路径/root/wp-cron.php?doing_wp_cron=1.*
,但就像您看到的那样失败。
删除解决方案取决于您的sudo权限。如果允许,您可以运行bash子流程以root身份执行文件名扩展:
sudo bash -c "rm /root/a*"
如果不允许,请使用显式文件名执行sudo rm。
答案 1 :(得分:0)
布兰登,
我同意@arkascha。那个glob应该匹配,所以这里有些不对劲。如果你使用不同的二进制文件,比如'ls',你会获得适当的文件列表吗?试试这个:
ls /root/wp-cron.php?doing_wp_cron=1.*
如果返回完整的文件列表,那么你知道你的环境对于rm有一些有趣的东西。这可能是建议的别名。
如果您无法确定您的环境有什么不同或错误,您可以通过for循环运行文件列表并删除每个文件作为解决办法:
for file in `ls /root/wp-cron.php?doing_wp_cron=1.*`
do
rm $file
done