Automatisieren Sie die CD in ein Archivverzeichnis unter ~/.avfs

Automatisieren Sie die CD in ein Archivverzeichnis unter ~/.avfs

ich benutzeavfsum bequem von einer Shell-Eingabeaufforderung aus in Archive zu schauen. Dies erstellt eine Ansicht des gesamten Verzeichnisbaums unter ~/.avfs(wenn also eine Datei /path/to/fooexistiert, ist sie auch als sichtbar ~/.avfs/path/to/foo) und zusätzlich, wenn /path/to/fooes sich um eine Archivdatei handelt, ~/.avfs/path/to/foo#ein Verzeichnis, das eine Ansicht des obersten Verzeichnisses des Inhalts des Archivs ist.

Wenn ich das Innere eines Archivs erkunden möchte, ist das etwas umständlich: Ich muss in die ~/.avfsHierarchie wechseln, und die Vervollständigung voncd hilft mir nichtum diese Archivnamen einzugeben und #am Ende ein hinzuzufügen.

Ich möchte in der Lage sein, acd foo.zipvon auszuführen /path/to/dirund auszuführen cd ~/.avfs/path/to/dir#. Mit anständiger Vervollständigung für acd. Wie kann ich das machen?

Antwort1

Hier ist meine Implementierung von acd. Es macht das Richtige, egal, ob das Argument ein Verzeichnis oder ein Archiv ist. acdohne Argument ist gleichbedeutend mit acd ..

avfs_cd () {
  case "$2" in
    "$HOME/.avfs/"*) :;;
    /*) set -- "$1" "$HOME/.avfs$2";;
    *) set -- "$1" "$HOME/.avfs$PWD/$2"
  esac
  if ! [ -d "$2" ]; then
    set -- "$1" "${2}#"
  fi
  "$1" "$2"
}
alias acd='avfs_cd cd'
alias apushd='avfs_cd pushd'

Und hier ist meine Zsh-Vervollständigungsfunktion:

_acd () {
  _dirs
  _files -g "*.(7z|rar|tar.bz2|tar.gz|tar.xz|tbz2|tgz|zip)(e\\''REPLY=\${REPLY}\\#'\\')"
}
compdef _acd acd apushd

verwandte Informationen