Ich habe eine Liste von Ordnern und in jedem Ordner habe ich die Datei „file.txt“, die in allen Ordnern den gleichen Namen hat. Ich wollte den Pfad für diese Datei aus allen Ordnern sammeln und in einer Textdatei speichern. Dazu habe ich den folgenden Befehl im übergeordneten Ordner ausgeführt:
find $PWD -type f -name "file.txt" > paths.txt
Dieser Befehl speichert alle Pfade zu dieser Datei aus allen Ordnern in der Datei „path.txt“ wie folgt:
a/b/c/1/file.txt
a/b/c/2/file.txt
a/b/c/3/file.txt
a/b/c/4/file.txt
a/b/c/5/file.txt
a/b/c/6/file.txt
a/b/c/7/file.txt
.
.
.
.
Wie kann ich in der Datei „path.txt“ Platz zwischen den Zeilen schaffen, sodass sie wie folgt aussieht:
/a/b/c/1/file.txt /a/b/c/2/file.txt /a/b/c/3/file.txt /a/b/c/4/file.txt /a/b/c/5/file.txt /a/b/c/6/file.txt /a/b/c/7/file.txt ...
Antwort1
Noch eine Möglichkeit, find(1)
nur zum Spaß, vorausgesetzt GNU :
find $PWD -type f -name "file.txt" -printf '%p '
Antwort2
Sie können das LF-Zeichen mit dem Befehl 'tr' durch ein Leerzeichen ersetzen
tr '\012' ' ' < path.txt
Dies kann Teil des ursprünglichen Befehls sein:
find $PWD -type f -name "file.txt" | tr '\012' ' ' > paths.txt
Antwort3
Eine einfache Möglichkeit wäre, die find
Ausgabe weiterzuleiten xargs
(deren Standardaktion, wenn kein expliziter Befehl gegeben wird, darin besteht, die Argumente wiederzugeben).
find $PWD -type f -name "file.txt" | xargs > paths.txt
Im Gegensatz zum einfachen Ersetzen aller Zeilenumbrüche durch Leerzeichen bleibt hier der letzte Zeilenumbruch erhalten.
Antwort4
paste
Sie können auch verwenden ,
find . -type f -name "path.txt" -exec paste -d' ' -s {} \; > path.txt