Softlinks von Dateien erstellen, die sich in Unterordnern befinden, die Leerzeichen enthalten?

0

Ich habe einen Ordner, der mehrere Ordner mit ISOs in jedem hat. Einige Namen der Dateien und Ordner enthalten Leerzeichen. Hier ist ein Beispiel für eine Ordnerstruktur:

/ISOs
-CentOS
--Centos6
---Centos6_x64.iso
---Centos6_x86.iso
-Windows_10_Pro
--Windows_10_Pro.iso
-Windows 10 Enterprise
--Windows 10 Enterprise.iso

Befehle versucht:

find /mnt/fs1/Shares/Software$/ISOs/ -name \*.iso | xargs ln -sf /mnt/fs2/Shares/Images$/proxmox/template/iso

und

for file in "$(find /mnt/fs1/Shares/Software$/ISOs/ -name \*.iso)"; do ln -sf /mnt/fs2/Shares/Images$/server/template/iso/$file;

Mit den oben genannten Befehlen werden Verknüpfungen zu den Dateien erstellt, wobei jedoch alles ausgelassen wird, das ein Leerzeichen im Namen des Ordners / Unterordners oder im Namen der Datei enthält:

/iso
-Centos6_x64.iso
-Centos6_x86.iso
-Windows_10_Pro.iso

Was ist der beste Weg für mich, um alle in diesem Ordner enthaltenen Dateien aufzulisten?

Sektorjunkie
quelle
Der erste Befehl ist falsch, aber der zweite funktioniert, wenn Sie die Dollarzeichen umgehen \$, $signdie in doppelte Anführungszeichen eingeschlossen werden sollten "$sign".
AFH

Antworten:

0

Wenn Strings Leerzeichen enthalten, interpretiert die Shell diese als separate Befehle. Sie müssen den Pfad in Anführungszeichen setzen, damit die Shell weiß, dass es sich um eine einzelne Einheit handelt.

for file in "$(find /mnt/fs1/Shares/Software$/ISOs/ -name \*.iso)"; do ln -sf "/mnt/fs2/Shares/Images$/server/template/iso/$file;"

Ich habe einen ähnlichen Befehl auf meinem System ausprobiert, und ein einfacherer Weg wäre, dies zu tun

find /mnt/fs1/Shares/Software$/ISOs/ -name "*.iso" -exec ln -sf {} \;
Davidgo
quelle