Ich habe diesen Code:
for file in "[email protected]"*png; do
echo "$file"
done
Es funktioniert nur, wenn Sie einen Pfad angeben, der mit / endet, wie /root/
.
Was wäre der richtige Weg, um in solchen Situationen / zur Pfadeingabe hinzuzufügen, ohne mein Skript zu beschädigen?
Wenn Sie einen Pfad ohne / am Ende eingeben, geschieht dies einfach:
File: /root*png
Wenn ich es so ändere, dass es for file in "[email protected]"/*png; do
und geben Sie /root/test/
ein es funktioniert, aber das Ergebnis sieht hässlich aus :
File: //eadn-wc01-5196795.nxedge.io/root/test//sample2.png
Akzeptierte Antwort:
ilkkachu wies auf einen großen Fehler in meiner Antwort hin und korrigierte ihn in seiner, also geben Sie ihm bitte die Anerkennung, die er verdient. Ich habe mir aber eine andere Lösung ausgedacht:
#!/bin/bash
for dir in "[email protected]"; do
find "$dir" -type f -name '*png' -exec readlink -f {} \;
done
Beispiel :
$ 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
Originallösung :
for file in "${@%/}/"*png; do
echo "$file"
done
Das ${@%/} schneidet alle / am Ende Ihres Parameters ab und dann fügt das / außen es wieder hinzu – oder fügt es jedem Parameter hinzu, der keins hatte.