免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 14755 | 回复: 16
打印 上一主题 下一主题

mkdir 函数有-p 参数吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-04 11:16 |只看该作者 |倒序浏览
shell 下可以用mkdir创建目录 mkdir -p /aaa/bbb/ccc/ddd
即使目录 ddd 之前的目录不存在也可以创建。

但是 perl 内置的 mkdir 好像不能使用参数。

在网上查到了以下代码:
use   File:: Path;   
  my   $path='/home/developer/perlDir';   
  eval{mkpath($path,0,0755)};   
  if($@)   
  {   
        warn("Make   path   [$path]   failed:\n $ @ ");   
  }   
还没有试可不可行,有更简单些的方法吗?

[ 本帖最后由 qfmeal 于 2009-11-4 11:18 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-11-04 11:26 |只看该作者

回复 #1 qfmeal 的帖子

system "mkdir -p /aaa/bbb/ccc/ddd";

论坛徽章:
0
3 [报告]
发表于 2009-11-04 11:37 |只看该作者
除了
system "mkdir -p /aaa/bbb/ccc/ddd";

`mkdir -p /aaa/bbb/ccc/ddd`;

还有别的方法吗? 用perl的函数。

论坛徽章:
0
4 [报告]
发表于 2009-11-04 12:00 |只看该作者
******

[ 本帖最后由 hitsubunnu 于 2009-11-4 12:11 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-11-04 13:07 |只看该作者

回复 #3 qfmeal 的帖子

当然有
问题是你想要干什么?放着好好的system不用?一定要写个100行的perl代码你才甘心

论坛徽章:
1
技术图书徽章
日期:2014-03-06 15:29:50
6 [报告]
发表于 2009-11-04 13:22 |只看该作者
File::Path mkpath

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2009-11-04 13:29 |只看该作者
原帖由 churchmice 于 2009-11-4 13:07 发表
当然有
问题是你想要干什么?放着好好的system不用?一定要写个100行的perl代码你才甘心

不用 100 行吧。
而且用 system 确实不是一个好习惯。

楼主选择 mkpath 是对的,只是用法不对。

  1. flw@waker:~$ perl -MFile::Path -e 'mkpath(["bar/a/b/c"],1,0777)'
  2. mkdir bar
  3. mkdir bar/a
  4. mkdir bar/a/b
  5. mkdir bar/a/b/c
  6. flw@waker:~$ find bar
  7. bar
  8. bar/a
  9. bar/a/b
  10. bar/a/b/c
  11. flw@waker:~$
复制代码

论坛徽章:
0
8 [报告]
发表于 2009-11-04 14:25 |只看该作者
#!/bin/perl -w

use strict;
use File::Path qw( mkpath );
mkpath("/home/Administrator/perl/aaaa/bbbbb/cccc/dddd",1,0755);


我不是放着好好的 system 不用。
因为这个效率太低。如果perl能实现就不用system。

我是新手,原来写脚本的时候从来没有考虑过这个问题,在一个循环里用了system,调用了很多次。
脚本执行需要10几分钟。后来仅仅是修改了system这部分,脚本执行还不到一分钟。

论坛徽章:
0
9 [报告]
发表于 2009-11-04 14:37 |只看该作者

回复 #8 qfmeal 的帖子

那你可以考虑下使用多个参数的system
system("ls -l")
这样的写法是会在后台调用/bin/sh的
但是
system("ls","-l")
这样的写法可以绕过/bin/sh直接调用/bin/ls

论坛徽章:
0
10 [报告]
发表于 2009-11-04 15:04 |只看该作者
原帖由 churchmice 于 2009-11-4 14:37 发表
那你可以考虑下使用多个参数的system
system("ls -l")
这样的写法是会在后台调用/bin/sh的
但是
system("ls","-l")
这样的写法可以绕过/bin/sh直接调用/bin/ls



谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP