Mám tento kód:
for file in "[email protected]"*png; do
echo "$file"
done
Funguje to pouze v případě, že zadáte cestu, která končí na / jako /root/
.
Jaký by byl správný způsob přidání / do vstupu cesty v situacích, jako je tato, aniž by došlo k porušení mého skriptu?
Pokud zadáte cestu bez / na konci, udělá to pouze toto:
File: /root*png
Pokud jej upravím tak, aby byl for file in "[email protected]"/*png; do
a zadejte /root/test/
funguje to, ale výsledek vypadá ošklivě :
File: //eadn-wc01-5196795.nxedge.io/root/test//sample2.png
Přijatá odpověď:
Ilkkachu poukázal na hlavní chybu v mé odpovědi a opravil ji ve své, takže mu prosím dejte uznání, které si zaslouží. Přišel jsem však s jiným řešením:
#!/bin/bash
for dir in "[email protected]"; do
find "$dir" -type f -name '*png' -exec readlink -f {} \;
done
Příklad :
$ 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
Původní řešení :
for file in "${@%/}/"*png; do
echo "$file"
done
${@%/} ořízne jakýkoli / z konce vašeho parametru a poté jej / mimo přidá zpět – nebo jej přidá k jakémukoli parametru, který žádný nemá.