GNU/Linux >> Tutoriales Linux >  >> Linux

Arreglar la secuencia de comandos de Bash que espera la entrada de la ruta con / Al final se rompe cuando la ruta no termina con /?

Tengo este código:

for file in "[email protected]"*png; do
  echo "$file"
done

Solo funciona si proporciona una ruta que termina con / like /root/ .

¿Cuál sería la forma correcta de agregar / a la entrada de ruta, en situaciones como esta, sin romper mi script?

Si proporciona una entrada de ruta sin / al final, solo hace esto:

File: /root*png

Si lo modifico para que sea for file in "[email protected]"/*png; do e ingrese /root/test/ funciona pero el resultado se ve feo :

File: //eadn-wc01-5196795.nxedge.io/root/test//sample2.png

Respuesta aceptada:

ilkkachu señaló una falla importante en mi respuesta y la corrigió en la suya, así que dele el crédito que se merece. Sin embargo, se me ocurrió otra solución:

#!/bin/bash

for dir in "[email protected]"; do
        find "$dir" -type f -name '*png' -exec readlink -f {}  \;
done

Ejemplo :

$ ll
total 6
-rwxr-xr-x 1 root root 104 Jan  7 14:03 script.sh*
drwxr-xr-x 2 root root   3 Jan  7 04:21 test1/
drwxr-xr-x 2 root root   3 Jan  7 04:21 test2/
drwxr-xr-x 2 root root   3 Jan  7 04:21 test3/

$ for n in {1..3}; do ll "test$n"; done
total 1
-rw-r--r-- 1 root root 0 Jan  7 04:21 testfile.png
total 1
-rw-r--r-- 1 root root 0 Jan  7 04:21 testfile.png
total 1
-rw-r--r-- 1 root root 0 Jan  7 04:21 testfile.png

$ ./script.sh test1 test2/ test3
//eadn-wc01-5196795.nxedge.io/root/temp/test1/testfile.png
//eadn-wc01-5196795.nxedge.io/root/temp/test2/testfile.png
//eadn-wc01-5196795.nxedge.io/root/temp/test3/testfile.png

Solución original :

for file in "${@%/}/"*png; do
  echo "$file"
done

El ${@%/} eliminará cualquier / del final de su parámetro y luego el / exterior lo agregará de nuevo, o lo agregará a cualquier parámetro que no tenía uno.


Linux
  1. En Bash, ¿cuándo alias, cuándo escribir y cuándo escribir una función?

  2. ¿Por qué The Bash Script no reconoce los alias?

  3. ¿Por qué no funciona ~/.bash_profile?

  4. ¿Por qué "sudo Su" en un script de Shell no ejecuta el resto del script como root?

  5. ¿La secuencia de comandos Bash con `set -e` no se detiene en el comando `… &&…`?

Automatice el procesamiento de imágenes con este script Bash

Use este útil script de Bash cuando observe las estrellas

Cómo escribir un script Bash con ejemplos

nombre base con espacios en un script bash?

'&&' vs. '&' con el comando 'test' en Bash

El script Nohup para Python no funciona cuando se ejecuta en segundo plano con &