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 -a
Option 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_mod
folgende 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 ls
ein 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 ls
durchgefü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 set
erneut, um das -a
Flag in die Parameter einzufügen. Am Ende verwenden wir, um den eigentlichen Befehl mit den von uns festgelegten Argumenten command
aufzurufen . Dankls
Murufür den Hinweis auf die set
Vereinfachung!
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 ls
bereits 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 ls
Aufrufen hinzu.