¿Crear enlaces suaves de archivos que están dentro de subcarpetas que contienen espacios?


0

Tengo una carpeta que tiene varias carpetas con ISO en cada una. Algunos nombres de los archivos y carpetas tienen espacios. Aquí hay un ejemplo de estructura de carpetas:

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

Comandos intentados:

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

y

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

Con el uso de los comandos anteriores, creará enlaces a los archivos, pero omite todo lo que tenga un espacio en el nombre de la carpeta / subcarpeta o en el nombre del archivo:

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

¿Cuál es la mejor manera para mí de enumerar todos los archivos contenidos en esta carpeta?


El primer comando es incorrecto, pero el segundo funcionará si escapa de los signos de dólar \$, aparte de $sign, que deben estar entre comillas dobles "$sign".
AFH

Respuestas:


0

Cuando hay espacios en las cadenas, el shell los interpreta como comandos separados. Debe encapsular la ruta entre comillas para que el shell sepa que es una sola unidad.

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

Intenté un comando similar en mi sistema, y ​​una forma más fácil de hacerlo sería

find /mnt/fs1/Shares/Software$/ISOs/ -name "*.iso" -exec ln -sf {} \;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.