Wie erstelle ich symbolische Links zu allen Dateien (Dateiklassen) in einem Verzeichnis?

Wie erstelle ich symbolische Links zu allen Dateien (Dateiklassen) in einem Verzeichnis?

Ich möchte symbolische Links ( ln -s) zu allen Dateien (oder einer Klasse von Dateien, z. B. mit der Endung .bar) in einem bestimmten Verzeichnis erstellen. Angenommen, ich bin im cwd und type ls ../source/*.bargibt mir

foo.bar
baz.bar

wie kann ich die Parameterliste übergeben, in ln -sdie es sich schließlich auflöst

ln -s ../source/foo.bar
ln -s ../source/baz.bar

Natürlich weiß ich, dass ich ein Bash-Skript schreiben kann, aber es sollte etwas Einfacheres geben, das etwas damit zu tun hat xargsoder so, da es – zumindest für mich – eine gängige Aufgabe zu sein scheint.

Antwort1

lnnimmt mehrere Argumente an, aber vergessen Sie in diesem Fall nicht, ein Zielverzeichnis anzugeben.

In Ihrem Beispiel .ist das Zielverzeichnis also so einfach wie

ln -s ../source/*.bar .

Von man ln; der obige Befehl verwendet die 3. Form:

ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
ln [OPTION]... TARGET                  (2nd form)
ln [OPTION]... TARGET... DIRECTORY     (3rd form)
ln [OPTION]... -t DIRECTORY TARGET...  (4th form)
  • Erstellen Sie im 1. Formular einen Link zu TARGET mit dem Namen LINK_NAME.
  • Erstellen Sie im 2. Formular einen Link zu TARGET im aktuellen Verzeichnis.
  • Erstellen Sie in der 3. und 4. Form Links zu jedem ZIEL im VERZEICHNIS.

Antwort2

Sie können es rekursiv versuchen, indem Sie entweder globstar verwenden (bash/zsh festgelegt durch: shopt -s globstar):

ls -vs ../**/*.bar .

Hinweis: -vFür ausführliche Ausführung hinzugefügt.

Oder wenn die Liste zu lang ist, verwenden Sie finddas Dienstprogramm:

find .. -name \*.bar -exec ln -vs "{}" dest/ ';'

Dadurch werden Links in erstellt dest/oder es wird .für den aktuellen Ordner geändert.

Antwort3

Verwendenfind

certainDir="/path/to/dir"
find -name "*.bar" -exec ln -s {} "$certainDir" \;

Denken Sie auch daran,vollständige Pfade(wo möglich) mit symbolischen Links.

Antwort4

cpMit -sder Option können Softlinks (oder -lHardlinks) erstellt werden.

Aus dem aktuellen Verzeichnis kann es folgendermaßen verwendet werden:

$ cp -s ../path/with/scripts/* .

In Deinem Fall sieht das dann so aus:

$ cp -s ../source/*.bar .

verwandte Informationen