我编写了一个C ++程序,它读取文件并输出具有相同名称的文件,稍作修改。现在我需要递归浏览到(任何包的)目录,然后在具有相同目录结构的单独目录中创建文件。
我可以使用
浏览目录@file_list = `find <package directory> -name '*.cpp'`;
我正试图像这样执行我的程序:
foreach (@file_list) {
# This gives error as sh: other_dir/./lev1/lev2/filename.cpp: not found
./myexe $_ other_dir/$_;
}
以前我编写过一个shell脚本,它对于在单个目录中包含文件的包很有效。脚本如下:
1 #!/bin/bash
2 #echo off
3 rm -rf demac_dir
4 mkdir demac_dir
5 for i in `ls *.h *.cpp`
6 do
7 echo processing file ${i} ...
8 ./main ${i} demac_dir/${i}
9 done
现在我正在尝试使用嵌套子目录中包含.cpp和.h文件的包(即wxWidgets)来做同样的事情。所以我编写了以下Perl脚本(在ysth的建议之后)。
1 #!/usr/bin/perl -l
2 use File::Path 'make_path';
3 use File::Basename 'dirname';
4
5 `rm -rf demac_dir`;
6 `mkdir demac_dir`;
7 @l1 = `find . -name '*.h'`;
8 @l2 = `find . -name '*.cpp'`;
9 @l3 = `find . -name '*.cc'`;
10 push(@l , @l1, @l2, @l3);
11 foreach (@l) {
12 print "processing file $_ ...";
13 make_path( dirname( "demac_dir/$_" ));
14 ## `touch touch demac_dir/$_`;
15 `sudo ./main $_ demac_dir/$_`;
16 }
17
答案 0 :(得分:1)
呃,你错过了一个系统()或那里我认为是你真实代码的东西。
要制作所需的目录,请尝试:
use File::Path 'make_path';
use File::Basename 'dirname';
foreach (@file_list) {
make_path( dirname( "other_dir/$_" ) );
...
}
更新:看到你的代码,看起来你在文件名的末尾留下换行符,这可能会给你带来麻烦(虽然我不明白为什么你的./main处理器会产生你说它的错误...)。
在foreach循环之前添加chomp(@l);
。
答案 1 :(得分:1)
检查morphus
中的FileHandler.pm和TemplateGenerator.pm