Perl: рекурсивный список файлов и каталогов, но исключая некоторые переданные каталоги и файлы

Пожалуйста, дайте любое предложение или фрагмент или что-нибудь, что может работать.

Я уже попробовал требуемую функцию, но как исключить какой-либо каталог во время рекурсии?

1 ответ

В Linux вы можете использовать команды Linux "find" и "grep" и запускать эти команды Linux в Perl, используя qx для сохранения результата команды Linux в Perl.

например

$cmd = "find . | grep -v 'dir1\|dir2\|...\|dirn'";
$result=qx($cmd);

Вышеуказанные комбинации команд делают следующее:

  1. Команда find перечисляет все каталоги и файлы рекурсивно.
  2. Труба "|" передаст результат поиска в команду grep
  3. Команда grep -v выведет на экран только строку, которой нет в "dir1", "dir2"... "dirn", которую следует игнорировать
  4. Наконец, команда qx выполнит команды find и grep Linux и сохранит вывод в переменную $result.

Вы можете сделать то же самое в Windows. Единственная разница заключается в использовании командной строки Windows.

например

$result=qx('dir /b/s | find /v "workspace" | find /v "TVM"')

Приведенная выше команда будет рекурсивно перечислять весь каталог, кроме того, что каталог имеет имя "workspace" или "TVM".

Другие вопросы по тегам