Creare collegamenti soft di file che si trovano all'interno di sottocartelle che contengono spazi?


0

Ho una cartella che ha diverse cartelle con ISO in ciascuna. Alcuni nomi di file e cartelle hanno spazi. Ecco una struttura di cartelle di esempio:

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

Comandi provati:

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

e

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

Con l'uso dei comandi precedenti, creerà collegamenti ai file, ma tralascerà tutto ciò che ha uno spazio nel nome della cartella / sottocartella o nel nome del file:

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

Qual è il modo migliore per elencare tutti i file contenuti in questa cartella?


Il primo comando è sbagliato, ma il secondo funzionerà se si evitano i segni del dollaro \$, a parte $sign, che dovrebbero essere racchiusi tra virgolette doppie "$sign".
AFH,

Risposte:


0

Quando ci sono spazi nelle stringhe, la shell li interpreta come comandi separati. Devi incapsulare il percorso tra virgolette in modo che la shell sappia che è una singola unità.

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

Ho provato un comando simile sul mio sistema e un modo più semplice per farlo sarebbe

find /mnt/fs1/Shares/Software$/ISOs/ -name "*.iso" -exec ln -sf {} \;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.