为什么还没有rm -fR folderpath/*
删除文件夹路径。据我所知,通配符a*
表示a
或a
加上任意数量的字符。因此,folderpath/*
表示folderpath/
和folderpath/
加上任何字符。因此,该命令还应该执行rm -fR folderpath/
,这也应该导致删除文件夹路径。
答案 0 :(得分:1)
这是因为shell试图扩展您的通配符。试试ls
。
假设您有一个文件夹aaa
,其中包含两个子文件夹bbb1
和bbb2
,每个子文件夹都包含文件ccc1
和ccc2
。看起来像这样:
└── aaa
├── bbb1
│ ├── ccc1
│ └── ccc2
└── bbb2
├── ccc1
└── ccc2
让我们创建它们进行测试:
mkdir -p aaa/bbb{1,2}
touch aaa/bbb{1,2}/ccc{1,2}
现在尝试以下命令显示的内容:
ls aaa # first
ls aaa/ # second
ls aaa/* # third
第一个命令会显示aaa
的内容,即文件夹bbb1
和bbb2
。第二个命令也是如此。
但是第三个命令扩展到
ls aaa/bbb1 aaa/bbb2
是的,它向您显示预期的bbb1
和bbb2
的内容,它们都是ccc1
和ccc2
的文件。
我想要展示的内容:您的shell会将*
替换为给定目录中的所有文件(或文件夹)(因为所有文件和文件夹名称都匹配)并替换您的字符串{ {1}} aaa/*
。但它不扩展到aaa/bbb1 aaa/bbb2
,因为那会占用aaa
。
答案 1 :(得分:1)
文档在这一点上并不清楚,但路径名扩展与普通模式匹配略有不同。匹配/
后,必须至少匹配目录中的一个条目才能将整个模式视为匹配。因此,虽然模式/foo/*
与字符串 /foo/
匹配,但它与路径 /foo/
不匹配。
一种可能的解释是/foo/*
匹配/foo/
中的文件,如果没有文件,则匹配失败。但是,如果
shopt -s dotglob
ls /foo/*
匹配/foo/.
和/foo/..
。
考虑它的正确方法也许是路径名扩展考虑/
- 分隔的模式序列,每个模式都必须与某些匹配整个模式才能匹配。
答案 2 :(得分:0)
因为您只删除了文件夹路径中的内容" /"意味着。
使用
rm -rf folderpath
如果你想要一切都消失了。