免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: oppajoe
打印 上一主题 下一主题

mkdir & rmdir 一个奇怪的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-05-18 09:55 |只看该作者
不错不错,解释的很清楚。

论坛徽章:
0
12 [报告]
发表于 2009-05-19 14:40 |只看该作者
总之一句话,通配符(出现在argument位置)由shell负责解释(与现有的文件名匹配),与具体的命令(ls,rm,mkdir)无关.正则表达式(出现在option位置上)由具体的应用程序解释(grep,sed,awk),与shell无关。



  1. [root@oum27 ansp]# ls
  2. example.data  tmp1  tmp2  tmp3  tmp6  tmp7  tmp8
  3. [root@oum27 ansp]# rmdir tmp[1-3]
  4. [root@oum27 ansp]# ls
  5. example.data  tmp6  tmp7  tmp8
复制代码



按照上面的那段话的解释,这里rmdir tmp[1-3]应该去匹配文件名,但是shell会发现没有这个文件名,那就应该不是把tmp[1-3]变成tmp1, tmp2, tmp3吧?

希望大虾能解释下,应该是我那里理解错了。

论坛徽章:
0
13 [报告]
发表于 2009-05-19 17:26 |只看该作者
希望有高手能解释下,正如楼主所说
mkdir tmp[1-3]  => 新建了文件夹tmp[1-3]
rm -rf tmp[1-3]  =>删除了文件夹tmp1, tmp2, tmp3

论坛徽章:
0
14 [报告]
发表于 2009-05-20 09:50 |只看该作者
这是我的评论:

------------------------------

又学习了一点(mkdir dir[0-9])  
感谢nhw_cs兄弟:http://www.chinaunix.net/jh/24/615489.html
    由于[0-9]这种匹配模式是出现在命令的 argument位置上,所以由shell负责解释(所以严格而言, [0-9]是通配符,而不是正则表达式)。对shell而言,统配符只对文件名有效,也就是说,当shell遇到出现在某个命令行的argument位置上的通配符时,它先要去参数所指定的目录下搜索所有已经存在的文件,所有文件名字与之匹配的都要替换到argument位置上(这与很多标准的命令支持多个文件名参数是一致的),然后调用该命令执行.

    对于mkdir ./dir[0-9]而言,shell无法在当前目录下找到与之匹配的文件名,所以就不替换,dir[0-9]按照原样传给mkdir程序,所以mkdir就建立了一个名字为dir[0-9]的目录.

    总之一句话,通配符(出现在argument位置)由shell负责解释(与现有的文件名匹配),与具体的命令(ls,rm,mkdir)无关.正则表达式(出现在option位置上)由具体的应用程序解释(grep,sed,awk),与shell无关。

一个试验的例子是:
    如果当前目录下已经有一个名为dir5的目录,执行 mkdir ./dir[0-9]后,出现错误提示:mkdir: cannot create directory `./dir5': File exists 这就证明了,因为存在dir5,所以shell匹配到了dir5,所以真正执行的是mkdir ./dir5

seq -f 'dir%01g' 0 9 | xargs mkdir  
[victor@localhost tmp]$ ls
[victor@localhost tmp]$ seq -f 'dir%01g' 0 9 | xargs mkdir
[victor@localhost tmp]$ ls
dir0  dir1  dir2  dir3  dir4  dir5  dir6  dir7  dir8  dir9

论坛徽章:
0
15 [报告]
发表于 2009-05-20 10:23 |只看该作者
原帖由 flyaway57 于 2009-5-19 14:40 发表




[root@oum27 ansp]# ls
example.data  tmp1  tmp2  tmp3  tmp6  tmp7  tmp8
[root@oum27 ansp]# rmdir tmp[1-3]
[root@oum27 ansp]# ls
example.data  tmp6  tmp7  tmp8



按照上面的那段话的 ...

你不是已建立了tmp1,tmp2,tmp3吗?shell会匹配到的……

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
16 [报告]
发表于 2009-05-20 10:34 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
17 [报告]
发表于 2009-05-20 15:26 |只看该作者

回复 #14 nhw_cs 的帖子

理解过于狭隘
目录也是文件名的一种,对吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP