Função que retorna o caminho absoluto do diretório pai

10
    (parent-dir "/home/sk/parent/ab.el")

    "/home/sk/parent"

então,

(parent-dir "/home/sk/parent")

"/home/sk"

Qualquer função elisp parent-dirque fornece caminho base para o caminho do arquivo e o caminho do diretório?

Madhavan
fonte

Respostas:

14

file-name-directory faz o que você solicita.

No entanto, (file-name-directory "/home/sk/parent/")(com uma barra à direita) retorna o mesmo diretório, não seu pai.

Isso faz o que eu acho que você realmente quer:

(file-name-directory (directory-file-name "/home/sk/parent/ab.el")) ; => "/home/sk/parent/"
(file-name-directory (directory-file-name "/home/sk/parent/")) ; => "/home/sk/"
(file-name-directory (directory-file-name "/home/sk/parent")) ; => "/home/sk/"

E a biblioteca Dired + usa esta função:

(defun diredp-parent-dir (file &optional relativep)
  "Return the parent directory of FILE, or nil if none.
Optional arg RELATIVEP non-nil means return a relative name, that is,
just the parent component."
  (let ((parent  (file-name-directory (directory-file-name (expand-file-name file))))
        relparent)
    (when relativep
      (setq relparent  (file-name-nondirectory (directory-file-name parent))))
    (and (not (equal parent file))  (or relparent  parent))))
Desenhou
fonte
0
(defun parent-directory (dir)
  (unless (equal "/" dir)
    (file-name-directory (directory-file-name dir))))

Retirado de https://stackoverflow.com/a/14096693/5103881

Arthur Colombini Gusmão
fonte