Как я могу удалить каталоги, включая их содержимое, используя perl? - PullRequest
1 голос
/ 27 мая 2019

Можно удалить сразу несколько каталогов, включая их содержимое, используя perl?Например: - У меня есть папки ниже

  • test1
  • test2
  • test3
  • test4

Могу ли я удалитьим нравится тест rm -rf *?я пробовал с ниже

system(@rm, '-fr', "$path/test*");

но это не принимает *

1 Ответ

6 голосов
/ 27 мая 2019

Сначала я должен сказать, что это опасно по своей природе, рекурсивно удаляя каталоги из программы.

Сказав это, один модуль, который предоставляет такую ​​возможность, является ядром File :: Path

use File::Path qw(remove_tree);

...

remove_tree( @dirs_to_delete, safe => 1 );

Это будет croak при ошибках, что, на мой взгляд, неплохо, если рекурсивное удаление имело проблемы. Но если это не сработает с вашими проектами, вы можете использовать опцию error, и тогда вам придется проверять ошибки. См. Обработка ошибок и несколько других полезных опций.

Это также удаляет файлы. Поэтому будьте внимательны при составлении списка вещей, которые нужно сдуть, например

use File::Glob ':bsd_glob';

my @dirs_to_delete = glob "$path/test*/";   # note the trailing /

, где завершающий / делает так, чтобы возвращались только каталоги. С помощью File :: Glob оператора use мы получаем glob из :bsd_glob, который работает с именами файлов, которые имеют пробелы. & dagger;

Также может быть безопаснее сначала приблизиться к тому, что вы хотите удалить

my $orig_cwd = Cwd::cwd;

chdir $path  or die "Can't \"chdir $path\": $!";

my @dirs_to_delete = glob "test*/";

# chdir $orig_cwd;

(есть другие варианты, кроме Cwd для chdir -ing и возврата к исходному cwd)
Это, конечно, (вообще) не делает его ошибочным.

Прошу прощения за неоднократные предупреждения, но сообщения о рекурсивном удалении заставляют меня немного нервничать.


& dagger; & thinsp; Или удвойте эти (двойные) кавычки, glob qq{"$path/test*/"}, или используйте \Q форму quotemeta , glob "\Q$path/test/*/", но которая также ускользает от всех несловесные символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...