Ich habe einen Prozess, der Textdateien erstellt, deren Dateinamen auf dem Zeitstempel ihres Erstellungszeitpunkts basieren:
$ ls
1378971222.txt
1378971254.txt
1378971482.txt
1378971488.txt
1378972089.txt
1378972140.txt
1378972141.txt
1378972153.txt
1378972155.txt
1378972241.txt
Wie kann ich den Dateinamen der zuletzt erstellten Datei , dh der Datei mit der neuesten Mtime, automatisch vervollständigen ? Es gibt keine Möglichkeit, die Tabulatorvervollständigung für diese Dateien zu verwenden, da fast jedes Zeichen im Dateinamen für eine andere Datei freigegeben ist. Ich hoffe, eine Abkürzung zu finden (zum Beispiel, Alt .
die das letzte Argument des letzten Befehls automatisch vervollständigt). Ich habe es geschafft , die folgende alias auszuhecken , die für groß ist VIM
, aber ich würde gerne wissen , ob ein Mehrzweck Verknüpfung besteht , dass ich mit nutzen könnten kde-open
, sqlite3
und andere Anwendungen.
alias lastest="vim `ls -t | grep -vE "^total [0-9]*$" | head -n1`"
quelle
$(ls -t|head -1)
in die Zeile ein. Daher kein Radfahren. In Ermangelung einer befriedigenden Antwort akzeptierte ich die Antwort, die mich am meisten lehrte und am nützlichsten war.Antworten:
Entfernen Sie einfach die
vim
aus dem Alias. Mach so etwas:Sie können dann ein beliebiges Programm verwenden, um die neuesten Dateien zu öffnen:
etc.
Dies funktioniert jedoch nicht, wenn Ihre Dateinamen Leerzeichen oder seltsame Zeichen enthalten. Aus diesem Grund sollten
ls
Sie diese niemals analysieren . Ein besserer Weg wäre so etwas (füge dies zu deinem hinzu.bashrc
):Diese Funktion führt jeden Befehl aus, den Sie als Argument angeben, und übergibt das Ergebnis des
find
Aufrufs (die neueste Datei) an diesen Befehl. So können Sie Dinge tun wie:Wenn Sie in der Lage sein müssen, Dinge wie
mv $(latest) foo/
diesen zu tun, versuchen Sie stattdessen diesen:Dann, um die neueste Datei zu kopieren
bar/
, würden Sie tunUnd Sie können es immer noch
latest emacs
auf die gleiche Weise tun wie zuvor.quelle
alias latest='\ls -tr | tail -n 1'
- dies wird funktionieren, wenn Siels
Alias haben.Sie können dies einfach konfigurieren
zsh
, z. B. mit so etwas:(Sie können die Zeile auch so ändern, dass dieser Stil nur für bestimmte Dateinamenmuster verwendet wird.)
zsh
ist bash sehr ähnlich, man könnte es wahrscheinlich als eine Obermenge von bash bezeichnen - je nach Funktion / Verwendung.Aber vielleicht hat bash eine ähnliche Funktion.
quelle
zsh
aber wenn ich es jemals tue, habe ich dieses Lesezeichen!zsh
!Da die neueste Datei auch zuletzt sortiert wird, können Sie verwenden
menu-complete-backward
.menu-complete
undmenu-complete-backward
blättern Sie durch die Abschlüsse oder fügen Sie den ersten oder letzten Abschluss ein. Ich habe sie an Options- und Shift-Tab gebunden in~/.inputrc
:Ihr Terminal-Emulator wird möglicherweise nicht eingefügt,
\e[Z
wenn Sie die Umschalttaste drücken. Verwenden SieC-v
oder, umcat -v
zu sehen, welcher Text beim Drücken einer Tastenkombination eingefügt wird.quelle
Hintergrund für die Frage ist die Nutzungsgeschwindigkeit. Ich finde ein Tastaturmakro am besten geeignet. Hinzufügen zu
~/.inputrc
:Weitere Ideen: Ursprünglich wollte ich etwas, das mir die 1., 2., 3. neueste Datei gibt. Eine Idee wäre, die Stellen mit einem Token zu markieren, zB "grep x _", dann ein Tastaturmakro "\ C-alatest-expansion \ Cm" auszuführen und "latest-expansion" eine Fluchauswahlliste zur Auswahl aufzufordern Die neuesten Dateien für jedes "_" -Token in der Befehlszeile.
Ich halte dies für eine wichtige Frage, da ein verbleibender Vorteil der GUI gegenüber SHELL für mich die Auswahl der zuletzt verwendeten / erstellten Dateien und Verzeichnisse ist.
autojump
hilft etwas für verzeichnisse, eine lösung für dateien fehlt.quelle
$(ls -t|head -1)
in die Bash-Zeile eingefügt wird und daher interpretiert werden muss. Das macht es weniger nützlich, aber es ist immer noch ein schöner Trick.