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.