GNU/Linux >> Tutoriels Linux >  >> Linux

Correction du script Bash attendant une entrée de chemin avec / à la fin se cassant lorsque le chemin ne se termine pas par /?

J'ai ce code :

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

Cela ne fonctionne que si vous fournissez un chemin qui se termine par / comme /root/ .

Quelle serait la bonne façon d'ajouter / à l'entrée du chemin, dans des situations comme celle-ci, sans casser mon script ?

Si vous donnez une entrée de chemin sans / à la fin, cela fait juste ceci :

File: /root*png

Si je le modifie pour qu'il soit for file in "[email protected]"/*png; do et saisissez /root/test/ ça marche mais le résultat est moche :

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

Réponse acceptée :

ilkkachu a souligné un défaut majeur dans ma réponse et l'a corrigé dans la sienne, alors s'il vous plaît, donnez-lui le crédit qu'il mérite. J'ai cependant trouvé une autre solution :

#!/bin/bash

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

Exemple :

$ 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

Solution originale :

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

Le ${@%/} supprimera tout / de la fin de votre paramètre, puis le / extérieur le rajoutera - ou l'ajoutera à tout paramètre qui n'en avait pas.


Linux
  1. Désactiver la connexion avec le compte root

  2. Le script Bash avec `set -e` ne s'arrête pas sur la commande `… &&…` ?

  3. Comment signaler la fin de l'entrée Stdin ?

  4. Comment définir les paramètres lorsque Pipe Bash Script to Bash ?

  5. Fin de transmission de la redirection Bash Tcp ?

Automatisez le traitement des images avec ce script Bash

Utilisez ce script Bash utile pour observer les étoiles

Comment écrire un script bash avec des exemples

Dans un script bash, comment la commande Continuer fonctionne-t-elle avec les boucles intégrées ?

nom de base avec des espaces dans un script bash ?

Ajouter un script bash au chemin