[root@aman dir2]# ls
d1 d2 d3 d4 d5 f1 f2 f3 f4 f5
[root@aman dir2]# rm -f *
rm: cannot remove `d1': Is a directory
rm: cannot remove `d2': Is a directory
rm: cannot remove `d3': Is a directory
rm: cannot remove `d4': Is a directory
rm: cannot remove `d5': Is a directory
[root@aman dir2]# ls
d1 d2 d3 d4 d5
[root@aman dir2]# rm -rf *
[root@aman dir2]# ls
[root@aman dir2]#
我正在编写一个删除文件和目录的工具。我需要验证用户是否已将参数设为"*"
,然后删除所有文件和文件夹。但是"*"
作为参数给出了目录中存在的文件和文件夹的数量,如何验证"*"
而不给出双引号。
./a.out *
或./a.out -f *
或./a.out -rf *
。我无法给出./a.out "*"
。我需要输入./a.out *
并进行验证。怎么做?
答案 0 :(得分:0)
你绝对不能这样做。原因是它是你的shell,而不是你运行过程的任何部分,它会扩展像*
这样的通配符。但是你有一些选择:
'*'
,并使用glob
,fnmatch
等在内部展开它。您可以检测通配符是否已被扩展通过注意多个输入参数到达,或者如果单个输入参数,它是一个现有文件名(*
不太可能存在于真实文件名中)。这样做的好处是,您永远不会无法处理非常大的扩展; shell本身不能在命令行上传递超过一定数量的字符,这有时是通配符的限制。