Я написал программу на 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/$_;
}
Ранее я написал сценарий оболочки, который хорошо работал с пакетами, содержащими файлы в одном каталоге.Сценарий выглядит следующим образом:
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
Теперь я пытаюсь сделать то же самое с пакетом (например, wxWidgets ), который имеет файлы .cpp и .h во вложенных подкаталогах.Поэтому я написал следующий скрипт на 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