В Perl, как я могу создать подкаталог и в то же время создать родительские каталоги, если они не существуют? Как команда mkdir -p UNIX?Как создать каталог и родительские каталоги в одной команде Perl?
ответ
use File::Path qw(make_path);
make_path("path/to/sub/directory");
Устаревшей mkpath и предпочтительным make_path вытекает из обсуждения в Perl 5 Porters нить, что заархивированы here.
Вкратце, тестирование Perl 5.10 показало неловкость в анализе аргументов интерфейса makepath(). Таким образом, он был заменен более простой версией, в которой в качестве конечного аргумента принимался хеш для установки параметров функции.
@skiphoppy: Это все еще не «как команда mkdir -p UNIX», как указано в вопросе. mkdir's man page показывает -p, --parents no error if existing, make parent directories as needed
Но make_path возвращает false, если каталог существует. (т. е. make_path "/ tmp/foo" или die; #will die if/tmp/foo существует) –
Randall
Использование mkpath из модуля File :: Path:
use File::Path qw(mkpath);
mkpath("path/to/sub/directory");
Исследуя это сейчас, я вижу, что mkpath() устарел, а официальный интерфейс теперь make_path(). Если кто-то напишет подробное объяснение относительно того, что нас покупает, я сделаю это принятым ответом. – skiphoppy
исх http://perldoc.perl.org/File/Path.html
«Функция make_path создает данные каталоги, если они не существует [так!] Перед тем, как и команды Unix mkdir -p
»
Пожалуйста игнорируемых, если вы ищете Perl модуль с «MkDir -p» функциональность, но следующий код будет работать:
my $dir = '/root/example/dir';
system ("mkdir -p $dir 2> /dev/null") == 0
or die "failed to create $dir. exiting...\n";
вы можете использовать модуль, но тогда вы должны установить его на каждом сервере, который вы собираетесь портировать свой код на. Обычно я предпочитаю использовать системную функцию для работы типа mkdir, потому что для импорта и вызова модуля требуется меньше ресурсов, когда мне нужно его только один раз, чтобы создать каталог.
Этот подход имеет смысл, если вы хотите избежать установки модулей. Обычно я предпочитаю требовать установки модулей, которые мне нужны, или я отказываюсь поддерживать систему. :) Я предпочитаю использовать модули, поэтому я могу воспользоваться преимуществами тестирования и исследований, которые им попали, поэтому я могу избежать ошибок, таких как неспособность проверить системные вызовы или потерять вывод сообщений об ошибках, а также потому, что на них меньше накладных расходов для создания процесса. – skiphoppy
Не создает ли зависимость от операционной системы? –
- 1. Родительские каталоги и PHP
- 2. Удалить каталог и его подкаталоги в одной команде
- 3. rsync - создать все отсутствующие родительские каталоги?
- 4. maven не удалось создать родительские каталоги
- 5. Родительские каталоги исходного файла
- 6. Как создать файл и его родительские каталоги в одном вызове метода?
- 7. каталоги тильды (~) в Perl
- 8. Создайте файл и его родительские каталоги в c
- 9. Создать каталог/каталоги в Eclipse с java.io.File
- 10. Как перебрать родительские каталоги в php?
- 11. проверить, существует ли каталог и удалить в одной команде unix
- 12. Попытка удалить файл и его родительские каталоги
- 13. Как проверить, что каталог пуст или нет в одной команде?
- 14. Как создать и открыть файл в одной команде (Mac-терминал)?
- 15. Gulp jade не включая родительские каталоги
- 16. Создать тестовый стол в одной команде sql
- 17. Проверить и создать итеративные каталоги
- 18. Nosetest, в том числе нежелательные родительские каталоги
- 19. Как сделать скрипт perl создать каталог и makefile в скрипте
- 20. Как перенести и отменить в одной команде?
- 21. Perl: рекурсивно переименовать все файлы и каталоги
- 22. Создать папку и файл в одной команде с помощью PowerShell
- 23. Можно ли скомпилировать каталог src в одной команде?
- 24. Проверьте, если каталог является корневым Git в одной команде
- 25. Как создать несколько ветвей git в одной команде?
- 26. Как я могу в одной команде создать или обновить пульт?
- 27. Как скопировать каталог, содержащий вспомогательные каталоги?
- 28. Как создать файл, содержащий файлы и каталоги?
- 29. urlparse.urljoin() не обрабатывает недопустимые родительские каталоги
- 30. Получить родительские каталоги файла, до точки
Добавил этот вопрос, чтобы я мог найти его снова в будущем, а не искать его каждый раз. По какой-то причине я всегда искал это в POSIX.pm. – skiphoppy