26.11 Создание, копирование и удаление каталогов

Большинство функций манипулирования файлами Emacs Lisp выдают ошибки при работе с файлами, которые являются каталогами. Например, вы не можете удалить каталог с помощью delete-file. Эти специальные функции существуют для создания и удаления каталогов.

Команда: make-directory dirname &optional parents

Эта команда создает каталог с именем dirname. Если parents не равен nil, как всегда происходит при интерактивном вызове, это означает создание родительских каталогов в первую очередь, если они еще не существуют. Как функция, make-directory возвращает не-nil, если dirname уже существует как каталог, и parents не равен nil, и возвращает nil, если он успешно создал dirname. mkdir является псевдонимом для этой команды.

Команда: make-empty-file filename &optional parents

Эта команда создает пустой файл с именем filename. Как make-directory, эта команда создает родительские каталоги, если parents не равен nil. Если filename уже существует, эта команда сигнализирует об ошибке.

Команда: copy-directory dirname newname &optional keep-time parents copy-contents

Эта команда копирует каталог с именем dirname в newname. Если newname является именем каталога, dirname будет скопирован во вложенный каталог там. См. Имена каталогов.

Она всегда устанавливает режимы файлов скопированных файлов в соответствии с соответствующим исходным файлом.

Третий аргумент keep-time не равен nil означает сохранение времени модификации скопированных файлов. Префиксный аргумент делает keep-time не равным nil.

Четвертый аргумент parents указывает, следует ли создавать родительские каталоги, если они не существуют. В интерактивном режиме это происходит по умолчанию.

Пятый аргумент copy-contents, если он не равен nil, означает копирование содержимого dirname непосредственно в newname, если последнее является именем каталога, вместо копирования dirname в него как во вложенный каталог.

Команда: delete-directory dirname &optional recursive trash

Эта команда удаляет каталог с именем dirname. Функция delete-file не работает для файлов, которые являются каталогами; для них вы должны использовать delete-directory. Если recursive равен nil, и каталог содержит какие-либо файлы, delete-directory сигнализирует об ошибке. Если recursive не равен nil, нет ошибки просто потому, что каталог или его файлы были удалены какой-либо другой процесс до того, как delete-directory до них доберется.

delete-directory следует только символическим ссылкам на уровне родительских каталогов.

Если необязательный аргумент trash не равен nil, а переменная delete-by-moving-to-trash не равна nil, эта команда перемещает файл в системную Корзину вместо удаления. См. Различные операции с файлами в Руководстве GNU Emacs. При интерактивном вызове trash равен t, если не указан префиксный аргумент, и nil в противном случае.