Wie Sie rekursiv alle Unterverzeichnisse hinzufügen, um den PFAD?
Wie Sie es tun? Mein Verzeichnis code/
, bei der Arbeit, ist in Ordnern und Unterordnern organisiert und subsubfolders, die (zumindest in der Theorie) enthalten Skripte oder Programme, die ich ausführen möchten, auf einer regelmäßigen basis.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Am Ende Ihres Skripts, setzen Sie die Zeile:
Diese angefügt werden jedes Verzeichnis in ~/code-Struktur, um den aktuellen Pfad. Ich weiß nicht, wie die Idee selbst, sondern nur ein paar Verzeichnisse, die meine eigenen Dateien und explizit aufzulisten, sondern zu jeder Ihre eigenen.
Wenn Sie ausschließen möchten, in der alle Verzeichnisse, die versteckt sind, benötigen Sie grundsätzlich, um Streifen aus jeder Zeile, die die Reihenfolge
"/."
(um sicherzustellen, dass Sie nicht überprüfen, Unterverzeichnisse unter versteckte Verzeichnisse):Dieses Stoppt Sie aus immer Verzeichnisse wie
~/code/level1/.hidden/level3/
(d.h., es Stoppt die Suche innerhalb des sub-Bäume, sobald Sie erkennt, Sie sind versteckt). Wenn Sie nur wollen, zu halten, die versteckten Verzeichnisse aus, aber immer noch erlauben, die nicht-versteckten Verzeichnisse unter Ihnen, verwenden Sie:Dies würde es ermöglichen
~/code/level1/.hidden2/level3/
aber keine~/code/level1/.hidden2/.hidden3/
seit-name
prüft nur den Namen der Datei, nicht den vollständigen Pfad-Namen.sed
wo Funktionen infind
würde genauso gut funktionieren). Sehr enttäuscht zu sehen, es markiert akzeptiert.Den folgenden Das Richtige Tut, einschließlich schneiden versteckte Verzeichnisse und Ihre Kinder und ordnungsgemäß handling-Namen mit newlines oder anderen whitespace:
Verwende ich einen ähnlichen trick für automatisch Einstellung
CLASSPATH
s.Wenn Sie wirklich brauchen, um zu gehen diesen Weg, Sie könnten versuchen, zu minimieren, dass die Pfade-Liste einige mehr: drop-Ordner, die enthalten keine ausführbaren Dateien. Natürlich, auf Kosten von noch mehr Statistiken. ;-/
Würde ich vermeiden, diese in jeder shell spawnen. Eine Art von caching verwendet werden sollte. Zum Beispiel, fügen Sie diese Zeile in Ihre ~/.bashrc:
und führen
nur, wenn Sie wissen, dass etwas wirklich verändert.
EDIT: hier ist ein umschreiben, ohne Ihr fehlen -printf
Etwas wie
oder
find "$root" -name ".[a-z]*" -prune -o -type d -printf '%p:'
ausschließen dotfiles, die dem Muster entsprechen (ohne.
ist unklug, und die gegebenen hack ist ein passabler 80% - Lösung zu vermeiden).In der bash 4.0, können Sie einfach die neu unterstützten
**
Betreiber.Sie haben, um es zu aktivieren, zuerst auf einige mit :
Können Sie dann tun
rekursiv echos alle Dateien aus, die Nachfahren des aktuellen verz.
Vorsicht, es nicht dazu neigen, aus der Patsche helfen, auf allzu komplizierte dirs manchmal, so verwenden ** bei der niedrigsten recucurring Punkt.
Zufällig, strahlt rekursiv alle directory-Namen, und nur die Verzeichnisnamen. ( Ohne das aktuelle Verzeichnis )
Umfasst das aktuelle dir. ( Übrigens ist es auch überspringt die versteckten Verzeichnisse )
Sollte dies thuswise geeignet für die Schaffung eines Pfad-string:
Und wenn Sie nicht wollen, relative Pfade,
Ack
Aus deinem Kommentar auf einem der anderen Beiträge, es klingt wie Sie wollen, sind Verhalten viel wie 'Ack' bietet. Wenn Sie beabsichtigen, verwenden Sie eine find + grep-Kombination, dieses Werkzeug ist in der Regel sehr viel effizienter und einfacher zu benutzen für diese Aufgabe.
Beispiel:
echo "hello world" | sed 's/\s/x/'
strahlthelloxworld
\s
freundlich. verwenden[[:space:]]
statt\s
🙁sed
auf UNIX haben soll.paths=( **/ ); oIFS="$IFS"; IFS=':'; CLASSPATH=${paths[*]}; IFS="$oIFS"
Ich habe auf der Suche nach einer Lösung für dieses problem zu. Es wäre toll, wenn bash hatte eine Art, zu sagen, dass für bestimmte Pfade, die Sie wollen, um die Suche für die Dateien rekursiv. Zum Beispiel
wo
~/bin
würde, durchsucht dieses Verzeichnis und alle seine Unterverzeichnisse, ohne ein Chaos aus IhremPATH
variable.Da das nicht umgesetzt, meine vorübergehende Lösung ist, um alles in meinem bin-Verzeichnis und erstellen Sie ein weiteres Verzeichnis "bindir" enthält symbolische links zu den eigentlichen ausführbaren Dateien in "bin", aber Ihre angeordnet fein säuberlich in Unterverzeichnisse, um Sie leichter zu finden.
Meine Frage ist nur, ob ich den hard-links anstelle von symbolischen links.
Habe ich eine einzelne
bin
Verzeichnis$HOME/bin
und bekommt eine installierte Kopie von Programmen, die ich Baue (oder Skripts, oder symlinks auf Programme oder Skripte). Es hat derzeit fast 600 Befehle in es (ls | wc -l
sagt 604, aber es gibt ein Dutzend oder so sub-Verzeichnisse aus verschiedenen Gründen).Wenn ich Teste ein Programm, das ich ausführen, wo Baue ich es; sobald ich fertig mit dem testen vorerst, ich
acquire
es mit meinemacquire
Skript, welches die Datei kopiert und die Berechtigungen festgelegt auf Sie.Lässt mich mit einem schönen ordentlich Profil (ich benutze keine
.bashrc
; ich würde eher das setup einmal, wenn die login-shell startet, und die sub-shells Erben der Arbeitsumgebung, ohne zu analysieren.bashrc
wieder), aber einen eher plumpenbin
- Verzeichnis. Es vermeidet die Kosten für das zurücksetzen PFAD jedes mal, wenn eine shell gestartet wird, sind beispielsweise, und gegeben, wie Komplex mein Weg-Einstellung code ist, dass ist genauso gut!Etwas wie dieses:
Wenn Sie GNU finden, die Sie verwenden können
-printf ':%p'
direkt.