Sind Sie sicher, dass /data//links/a 1
die Fehlermeldung angezeigt wird? Ich würde erwarten /links//data/a 1
...
Leerzeichen sind nicht das Problem. Sehen Sie, was Sie echo
Ihnen gegeben haben. Dein String $file
enthält bereits /data/
. Das Stück Code
"/data/$" "/links/$"
fügt /data/
oder /links/
zu einer Zeichenfolge hinzu, wo /data/
bereits
Die einfachste Lösung ist, überhaupt $file
nicht enthalten zu machen /data/
:
cd /data for file in *; do # the rest of your script # in general remember you're in a different dir now
Alternativ können Sie for file in /data/*;
den übermäßigen Teil später behalten und entfernen:
for file in /data/*; do file=$(basename "$file") # the rest of your script
Die obige Lösung wird mehrere Prozesse erzeugen, da basename
es sich um eine separate ausführbare Datei handelt. Aus diesem Grund möchten Sie möglicherweise, dass die Shell selbst die Aufgabe erledigt:
for file in /data/*; do file="$" # the rest of your script
Die Syntax $
druckt, $file
aber die längste passende Zeichenfolge wird */
von der Vorderseite entfernt. Der Effekt ist, dass es Ihnen das gibt, was nach dem letzten noch da ist /
.