2080 Asked: 2019-08-08 11:27:40 +0800 CST2019-08-08 11:27:40 +0800 CST 2019-08-08 11:27:40 +0800 CST rm * 的删除行为 772 如果我rm *在包含文件的目录中执行,是否只删除该目录中的文件?还是星号也包含文件系统根目录/? rm 2 个回答 Voted Best Answer user1686 2019-08-08T11:36:44+08:002019-08-08T11:36:44+08:00 正如普通文件名引用当前目录中的项目一样,*也扩展为当前目录中的项目。没有任何机制可以将其包含/在结果中。(您始终可以使用 进行测试echo *。) 因此,当前目录中的所有文件都将被删除,但目录将保留,因为您没有指定递归删除目录的选项 (-r)。 如果您使用 启用递归模式rm -r,那么文件和子目录将被删除——但程序只会向下运行,而不会向上运行。(rm 总是跳过..引用“父目录”的项目。事实上,在 Linux 上,即使您故意尝试rm -r ..它也会显示警告并拒绝这样做。) kenorb 2019-08-09T02:38:07+08:002019-08-09T02:38:07+08:00 要确认*当前 shell 扩展到的内容,请运行: echo * 默认情况下,它仅包含当前文件夹中的非隐藏文件/目录。对于隐藏文件,设置dotglob. 但是,如果您运行: echo .* 默认情况下,它将包括所有隐藏文件,以及当前文件夹 ( .) 和父文件夹 ( ..)。 有关解决方法,请参阅:如何在 bash 中使用 .* 通配符但排除父目录 (..)?
正如普通文件名引用当前目录中的项目一样,
*
也扩展为当前目录中的项目。没有任何机制可以将其包含/
在结果中。(您始终可以使用 进行测试echo *
。)因此,当前目录中的所有文件都将被删除,但目录将保留,因为您没有指定递归删除目录的选项 (-r)。
如果您使用 启用递归模式
rm -r
,那么文件和子目录将被删除——但程序只会向下运行,而不会向上运行。(rm 总是跳过..
引用“父目录”的项目。事实上,在 Linux 上,即使您故意尝试rm -r ..
它也会显示警告并拒绝这样做。)要确认
*
当前 shell 扩展到的内容,请运行:默认情况下,它仅包含当前文件夹中的非隐藏文件/目录。对于隐藏文件,设置
dotglob
.但是,如果您运行:
默认情况下,它将包括所有隐藏文件,以及当前文件夹 (
.
) 和父文件夹 (..
)。有关解决方法,请参阅:如何在 bash 中使用 .* 通配符但排除父目录 (..)?