Gibt es eine Möglichkeit, ls so einzustellen, dass versteckte Dateien nur für bestimmte Verzeichnisse angezeigt werden?

Gibt es eine Möglichkeit, ls so einzustellen, dass versteckte Dateien nur für bestimmte Verzeichnisse angezeigt werden?

Ich habe ein Verzeichnis, in dem unabhängig vom Benutzer oder den ausgewählten Optionen immer versteckte Dateien angezeigt werden sollen.

Ich weiß, dass die -aOption versteckte Dateien anzeigt. Ich möchte nur die Entscheidung über die Verwendung der Option automatisieren.

Angenommen, ich befinde mich in /home/user, dann möchte ich die versteckten Dateien nicht sehen, aber wenn ich in /filestoprcess bin, möchte ich die versteckten Dateien sehen.

Gibt es diese Art von Funktionalität?

Antwort1

Der einfachste Weg, der mir hierfür einfällt, wäre, einen Shell-Alias ​​zu erstellen, der einer Funktion zugeordnet ist. Nehmen wir an, wir verwenden Bash und fügen den folgenden Alias ​​zu Ihrer hinzu .bashrc:

alias ls=ls_mod

Fügen Sie nun die ls_modfolgende Funktion hinzu:

ls_mod () {
    DIRS_TO_SHOW_HIDDEN=(dir1 dir2 dir3)
    for DIR in "$@"; do
        for CHECK in "${DIRS_TO_SHOW_HIDDEN[@]}"; do
            if [ "$(realpath "$DIR")" == "$CHECK" ]; then
                ls -a "$DIR"
            else
                ls "$DIR"
            fi
        done
    done
}

Ich habe das nicht getestet, also bezweifle ich, dass es perfekt ist, aber es vermittelt Ihnen zumindest eine Vorstellung. Möglicherweise müssen Sie daran arbeiten, zusätzliche Argumente an zu übergeben ls.

Antwort2

Um meinen Kommentar zu John Moons Antwort zu konkretisieren, hier ist eine Funktion, die lsein Flag umschließt und hinzufügt -a, wenn der Pfad mit einer bestimmten Liste übereinstimmt:

function ls() {
  # if no arguments are provided, the current directory is assumed
  [ "$#" -eq 0 ] && set .
  case "$(realpath "$1")" in
        (/path/to/jason/filestoprocess*|\
         /path/to/jason/otherfilestoprocess*)
                set -- -a "$1" ;;
  esac
  command ls "$@"
}

Der erste Abschnitt der Funktion prüft, ob ein Leervorgang lsdurchgeführt wird. In diesem Fall legen wir .(das aktuelle Verzeichnis) als Parameter Nr. 1 fest. Andernfalls nehmen wir an, dass der (angegebene) erste Parameter der Pfad zur Liste ist.

Wenn der gesetzte oder angegebene Pfad den aufgelisteten Mustern entspricht (hier entweder ...filestoprocess oder ...otherfilestoprocess), verwenden wir seterneut, um das -aFlag in die Parameter einzufügen. Am Ende verwenden wir, um den eigentlichen Befehl mit den von uns festgelegten Argumenten commandaufzurufen . DanklsMurufür den Hinweis auf die setVereinfachung!

Um weitere Pfade hinzuzufügen, setzen Sie die Muster einfach fort und trennen Sie sie durch Pipe- (|)Zeichen. Ich habe die beiden vorhandenen Muster mit dem Backslash-Escape-Zeichen auf separate Zeilen aufgeteilt, \um sie leichter lesbar zu machen.

Wenn Sie lsbereits einen Alias ​​für etwas verwendet haben, hat dieser Vorrang und muss entfernt werden, damit diese Funktion funktioniert (sonst würden alle Flags, die der Alias ​​hinzufügt, an diese Funktion übergeben und in enden $1). Wenn es Flags gibt, die Sie standardmäßig verwenden möchten ls, fügen Sie sie einfach den beiden entsprechenden command lsAufrufen hinzu.

verwandte Informationen