Ich habe einen Ordner, der eine ganze Reihe von Ordnern enthält, die jeweils eine Filmdatei enthalten. Jetzt möchte ich alle diese Filme auf einmal sehen können (aber ich muss die Ordnerstruktur beibehalten), also wollte ich sie alle mit dem obersten Ordner verknüpfen (flache Ansicht in Directory Opus wäre das Ziel, aber ich bin auf einem Mac). Hier ist mein VersuchShell-Skript, um bestimmte Dateien eine Ebene höher zu verknüpfen
for file in */*/*.mov;
do
newname='echo $file | sed "s|[^/]*/[^/]*/||g"';
ln -s $file echo $newname;
done
Also, was ich versuche, auf Linie zu tun, 3 drehen Sie den Pfad foo/bar/spud.mov in spud.mov und dann in Zeile 4 tun ln -s foo/bar/Spud .mov spud.mov
Aber es funktioniert nicht, alles, was ich bekommen ist
ln: "s | [^ /] /[^ /]/|| g": keine solche Datei oder Verzeichnis
I'v Ich habe verschiedene Kombinationen von Zitaten und Fluchten ausprobiert, aber ohne Glück. Der sed Ausdruck funktioniert, aber ich habe offensichtlich etwas mit meinen Variablen vermasselt.
Dank
Der übliche Weg, um die letzte Komponente eines Pfadnamens zu erhalten, ist der Befehl basename: 'ln -s $ i $ (Basisname $ i)' –
Es ist ok, den Basisnamen für eine von zwei Dateien zu verwenden. Verwenden der Shell-Interna-String-Funktionen, um "Basisname" zu erhalten, ist viel effizienter. – ghostdog74
Sie brauchen keines von denen; gerade "." funktioniert, denn wenn ein Verzeichnis als letztes Argument übergeben wird, macht ln -s dasselbe ... – freiheit