bash: cd in das zuletzt geänderte untergeordnete Verzeichnis

9

Ich frage mich, ob es eine einfache und / oder tragbare Möglichkeit gibt, "Wechseln Sie in das zuletzt geänderte untergeordnete Verzeichnis" zu sagen. Ich kann ls und awk verwenden, aber es gibt wahrscheinlich einen besseren Weg.

cd $( ls -ltrd */ | tail -1 | awk '{ print $8 }' )

Ich muss einen Befehl in einem "Ausgabedateien" -Verzeichnis mit Hunderten von Unterverzeichnissen ausführen und 99% der Zeit möchte ich in das zuletzt geänderte Verzeichnis wechseln. Ich weiß nicht, wie die Namen der Verzeichnisse im Voraus lauten werden.

Twblamer
quelle
1
Warum nicht cd $(ls -v1td */ | head -1)?
Pablo Castellazzi
Guter Punkt ... Ich bin nicht so vertraut mit seinen Optionen, wie ich sein sollte ...
Twblamer

Antworten:

12

Angenommen, Ihre Verzeichnisse enthalten keine nicht druckbaren Zeichen:

cd  "$(\ls -1dt ./*/ | head -n 1)"

(Beachten Sie, dass auch Symlinks zu Verzeichnissen berücksichtigt werden).

Wenn es Ihnen nichts ausmacht, zu zsh zu wechseln:

cd ./*(/om[1])

Oder um Symlinks zu Verzeichnissen wie im ersten Beispiel einzufügen:

cd ./*(-/om[1])
Gilles 'SO - hör auf böse zu sein'
quelle
0

Genießen.

cdd(){ 
  # cd into the last directory modified/created in pwd
   ls -p | grep / | tail -1 | pbcopy; str=$(pbpaste); cd $str
}
jasonleonhard
quelle
Warum den Verzeichnisnamen in die Zwischenablage einfügen? Was passiert, wenn der Verzeichnisname ein Leerzeichen enthält?
Roaima
Die Verwendung der Zwischenablage erleichtert auf Wunsch weitere Vorgänge.
Jasonleonhard
Wenn Sie wirklich wollen, können Sie relativ einfach weitere Felder hinzufügen. Anstelle von {print $ 9} können Sie {print $ 9, $ 10, $ 11} so viele verwenden, wie Sie möchten.
Jasonleonhard
Ich habe meine Antwort überarbeitet, um Leerzeichen zu berücksichtigen.
Jasonleonhard
Hier ist eine grobe Erklärung: explainshell.com/...
jasonleonhard
-1

Versuchen Sie diesen kurzen versionierten Befehl

cd $(ls -t | head -n 1)   
Swapnil Misal
quelle
Dies funktioniert nur, wenn die zuletzt geänderte Datei im aktuellen Verzeichnis vom Typ Verzeichnis (oder Symlink zum Verzeichnis) ist und ihr Name keine Leerzeichen, Platzhalter oder Zeilenumbrüche enthält und nicht mit - beginnt. Es handelt sich also kaum um eine Verbesserung gegenüber dem bereits akzeptierte Antwort.
Stéphane Chazelas