Fehler beim Versuch, eine Datei mit -r im Dateinamen zu mv

Fehler beim Versuch, eine Datei mit -r im Dateinamen zu mv

Hier ist mein Problem:

Ich habe eine Datei mit -r im Namen:-r.jpg

Beim Versuch, eins auszuführen, mv *.jpg old/erhalte ich Folgendes:

mv: invalid option -- 'r'

Sogar für

for g in *.jpg;do echo $g &&mv "${g}" old/;done

Ich habe den gleichen Fehler.

Antwort1

Die meisten Befehlszeilenprogramme verfügen über eine Vorgabe zur TrennungOptionenausArgumente.

Das verhindert eine Vielzahl von Problemen mit"besonders"Dateinamen, die wie Optionen aussehen.

Das gebräuchlichste Trennzeichen am Ende der Optionen sind zwei Bindestriche --oder , --was auch von unterstützt wird mv.

Mit anderen Worten:

 mv [OPTIONS] -- SOURCE DEST

oder da Sie keine Optionen angegeben haben:

 mv -- *.jpg old/

Antwort2

Die einfachste Lösung wäre, dem Dateinamen die ./Beschreibung des relativen Pfads voranzustellen.

for g in *.jpg; do echo $g && mv "./${g}" old/; done

Es ist auch möglich, den absoluten Pfad zu verwenden

for g in $(pwd)/*.jpg; do echo $g && mv $g old/; done

Alternativ können Sie den Befehl verwenden, findda dieser bereits den relativen Pfad angibt (Sie können ihn verwenden, --max-depthwenn Sie nur das aktuelle Verzeichnis verarbeiten möchten).

for g in $(find . -name "*jpg"); do mv $g old; done

Und im schlimmsten Fall, wenn Sie viele komplexe, nicht analysierbare Zeichen haben, können Sie auf die Inode-Nummern in Kombination mit verweisen find -inumund Ihre Dateien entsprechend verarbeiten.

 $ for g in $(ls -i1 ./*jpg | cut -f1 -d' '); do find . -inum $g -print0 | xargs -0 -I '{}' mv '{}' old; done

verwandte Informationen