Wenn ich benutze find
, findet es oft mehrere Ergebnisse wie
find -name pom.xml
./projectA/pom.xml
./projectB/pom.xml
./projectC/pom.xml
Ich möchte oft nur ein bestimmtes Ergebnis auswählen (z edit ./projectB/pom.xml
. B. ). Gibt es eine Möglichkeit, die find
Ausgabe aufzulisten und eine Datei auszuwählen, die an eine andere Anwendung übergeben werden soll? mögen:
find <print line nums?> -name pom.xml
1 ./projectA/pom.xml
2 ./projectB/pom.xml
3 ./projectC/pom.xml
!! | <get 2nd entry> | xargs myEditor
?
[Bearbeiten] Ich bin mit einigen der genannten Lösungen auf einige Fehler gestoßen. Daher möchte ich die Schritte zur Reproduktion erläutern:
git clone http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.git
cd eclipse.platform.swt.git
<now try looking for 'pom.xml' and 'feature.xml' files>
[Bearbeiten] Lösung 1 Bisher scheint eine Kombination aus 'nl' (Aufzählung), Kopf und Schwanz zu funktionieren, wenn ich sie zu Funktionen kombiniere und $ (!!) verwende.
dh:
find -name pom.xml | nl #look for files, enumirate output.
#I then define a function called "nls"
nls () {
head -n $1 | tail -n 1
}
# I then type: (suppose I want to select item #2)
<my command> $(!!s 2)
# I press enter, it expands like: (suppose my command is vim)
vim $(find -name pom.xml |nls 2)
# bang, file #2 opens in vim and Bob's your uncle.
[Bearbeiten] Lösung 2 Die Verwendung von "Auswählen" scheint ebenfalls recht gut zu funktionieren. Ex:
findexec () {
# Usage: findexec <cmd> <name/pattern>
# ex: findexec vim pom.xml
IFS=$'\n';
select file in $(find -type f -name "$2"); do
#$EDITOR "$file"
"$1" "$file"
break
done;
unset IFS
}
Your find command | head -TheNumberYouWant
Erfüllung Ihrer Anforderungen? (Mit Ihrer Linie:!! | head -2 | xargs myEditor
)Antworten:
Verwenden Sie
bash
das integrierteselect
:Für die im Kommentar hinzugefügte "Bonus" -Frage:
quelle
select
scheint nicht gut mit dem Ändern zu platzierenIFS
.( IFS=$'\n'; select file in $(find -maxdepth 2 -name '*.txt'); do echo "$file"; done; )
Zwei kleine Funktionen helfen Ihnen dabei, dies zu lösen, vorausgesetzt, Ihre Dateinamen enthalten keine Zeilenumbrüche oder andere nicht druckbare Zeichen. (Es behandelt Dateinamen, die Leerzeichen enthalten.)
Beispiel
quelle
pom.xml
wird niemals Leerzeichen enthalten (:findnum
?Sie könnten den Kopf der Gesamtausgaben erhalten und ihn mit -1 abschließen. Dies kann die Ausgabe in einem anderen Befehl oder Editor weiterleiten, z.
(hol mir 100 Zeilen und drucke mir zuletzt die 100 aus) finde. | Kopf -100 | Schwanz -1
erhalten Sie die 100. Linie des Findens.
quelle
Wenn Sie nach einer Suche Dateien bearbeiten möchten, versuchen Sie es mit sag / sack .
Beispiel:
... dann das letzte Suchergebnis bearbeiten ....
Vorteil ist, dass Sie später das erste Suchergebnis mit bearbeiten können
quelle