Удаление подкаталогов и файлов в заданном каталоге

Я хочу удалить все подкаталоги и файлы из каталога, но не сам каталог. Например, если я передам каталог «Образец» в переменной, а каталог «Образец» содержит три подкаталога и 3 файла, я хочу удалить все эти 3 каталога и 3 файла. На практике каталог «Образец» может содержать множество подкаталогов и файлов.


person Shaggy    schedule 17.03.2012    source источник
comment
Используйте оболочку с командой find. Это намного проще, как один лайнер.   -  person Jasonw    schedule 17.03.2012
comment
@Jasonw Perl работает не только в системах UNIX...   -  person Alnitak    schedule 17.03.2012


Ответы (1)


ETA: На самом деле это в perlfaq5: Как удалить дерево каталогов?

Используйте File::Path, основной модуль.

perl -MFile::Path=remove_tree -we 
    'remove_tree("Sample",{keep_root=>1}) or die $!'

Опция keep_root заставит remove_tree сохранить верхний каталог:

keep_root => $bool

When set to a true value, will cause all files and subdirectories to be removed, except the initially specified directories. This comes in handy when cleaning out an application's scratch directory.

person TLP    schedule 17.03.2012
comment
+1 Функция rmdir удаляет только подкаталоги, внутри которых нет файлов, для удаления подкаталогов, содержащих файлы внутри, нужен модуль File::Path - person ; 17.03.2012
comment
Большое спасибо, ребята, за ваши ценные комментарии. @TLP люблю тебя!!! Я немного модифицировал код, но все равно он отлично работает use File::Path qw{remove_tree}; remove_tree(C:/FFFF2,{keep_root=›1}) или умри $! - person Shaggy; 18.03.2012