GNU/Linux >> Linux Esercitazione >  >> Linux

Risolto il problema con lo script Bash che prevedeva l'input del percorso con / alla fine si interrompe quando il percorso non termina con /?

Ho questo codice :

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

Funziona solo se fornisci un percorso che termina con / come /root/ .

Quale sarebbe il modo corretto per aggiungere / all'input del percorso, in situazioni come questa, senza interrompere il mio script?

Se inserisci un percorso senza / alla fine, fa semplicemente questo:

File: /root*png

Se lo modifico in for file in "[email protected]"/*png; do e inserisci /root/test/ funziona ma il risultato sembra brutto :

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

Risposta accettata:

ilkkachu ha sottolineato un grave difetto nella mia risposta e l'ha corretto nella sua, quindi per favore dagli il merito che merita. Ho trovato un'altra soluzione però:

#!/bin/bash

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

Esempio :

$ 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

Soluzione originale :

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

${@%/} taglierà qualsiasi / alla fine del tuo parametro e quindi / esterno lo aggiungerà di nuovo o lo aggiungerà a qualsiasi parametro che non ne aveva uno.


Linux
  1. Disabilita l'accesso con l'account root

  2. Come segnalare la fine dell'ingresso Stdin?

  3. Come impostare i parametri quando Pipe Bash Script su Bash?

  4. In uno script Bash Come funziona il comando Continua con i loop incorporati?

  5. In che modo uno script bash può conoscere la directory in cui è installato quando viene fornito con . operatore?

Automatizza l'elaborazione delle immagini con questo script Bash

Usa questo utile script Bash quando osservi le stelle

Come scrivere uno script Bash con esempi

Aggiungi uno script bash al percorso

'&&' vs. '&' con il comando 'test' in Bash

Lo script Nohup per Python non funziona durante l'esecuzione in background con &