Erstellen Sie viele Symlinks mit pwd und regulären Ausdrücken und Leerzeichen im Pfad

285
Exodd

Ich versuche, ein Skript zu erstellen, um die Dateien mit der gleichen Erweiterung in einem Ordner vom Rest zu trennen. Insbesondere möchte ich ein Skript, das in einem Ordner ausgeführt wird, Softlinks von allen .tex-Dateien erstellt und in einem Unterordner "sources" gespeichert.

Ich weiß, dass das lnmit regulären Ausdrücken gut zurechtkommt $PWDoder $(pwd)den Pfad zum aktuellen Ordner zurückgibt. Also versuchte ich es auszuführen

ln -s $PWD/*.tex ./sources/ 

In meinem Ordner wurde mir jedoch schnell klar, dass sich in meinem Pfad ein Ordner mit Leerzeichen befand, lnder mehrere Dateien liest. Also versuchte ich es mit

ln -s '$PWD'/*.tex ./sources/ 

und

ln -s '$PWD/*.tex' ./sources/ 

In beiden Fällen erstellt das Skript jedoch eine einzige Datei, die *.texin meinem sourcesOrdner benannt ist. Nach einigen Posts versuchte ich, die Leerzeichen im Pfad wie folgt zu ändern

ln -s $(printf "%q\n" "$PWD")/*.tex sources/  ln -s '$(printf "%q\n" "$PWD")'/*.tex sources/  ln -s '$(printf "%q\n" "$PWD")/*.tex' sources/ 

Die Ausgabe war jedoch dieselbe (mit dem Unterschied eines zusätzlichen Zeichens \).

Hilfe?

0

1 Antwort auf die Frage

0
egmont

Dein erster Versuch sollte funktionieren. Tut es nicht Was macht es stattdessen?

*ersetzt mit allen passenden Dateinamen, aber nicht nicht Aufspaltung in Innenräumen danach auszuführen.

"Ich weiß, dass ich mit regulären Ausdrücken gut umgehen kann" - das ist falsch. Erstens sehen Sie hier Muschelmuster, keine regulären Ausdrücke. Zweitens geht es nicht lnum sie, sondern um Ihre Shell (normalerweise bash) vor dem Start lnoder um einen anderen Befehl.

Beim ersten Versuch werden entsprechend den Leerzeichen im Pfad mehrere Dateien erzeugt: Wenn der Ordner beispielsweise "Meine Dateien" heißt, werden mit dem Befehl "ln -s $ PWD / *. tex sources /" zwei Dateien erzeugt, die einen Namen haben `my` und` * .tex` ignorieren den Inhalt des Ordners Exodd vor 7 Jahren 0
Oh, Entschuldigung, ich habe die Situation falsch verstanden. Ich dachte, es waren die .tex-Dateien, deren Namen Leerzeichen enthielten. Sie sollten `$ PWD 'in doppelte Anführungszeichen setzen:` "$ PWD" / * ` egmont vor 7 Jahren 1
Sie sollten das in Ihre Antwort schreiben Exodd vor 7 Jahren 0