Es wird nicht empfohlen, a *
zum Entfernen von Dateien zu verwenden. Es könnte mehr passen, als Sie möchten.
In Debian kann der ls
Befehl (von GNU) die Werte der Dateien in Anführungszeichen drucken [ 1 ] :
$ ls -Q
"\nssolve" "\n\nssolve" "y" "z"
Oder, noch besser, listen Sie Dateien mit zitierten Namen und Inodes auf:
$ ls -iQ
26738692 "\nssolve" 26738737 "\n\nssolve" 26738785 "y" 26738786 "z"
Verwenden Sie dann rm mit der Inode-Nummer, um sicherzustellen, dass nur die richtigen Dateien entfernt werden:
$ find . -xdev -inum 26738737 -exec rm -i {} \;
Der Aufruf zum Suchen ist auf ein Dateisystem ( -xdev
) beschränkt, um zu vermeiden, dass eine Datei in einem anderen Dateisystem mit derselben Inode-Nummer abgeglichen wird. Beachten Sie auch, dass rm
dies mit der -i
Option (interaktiv) aufgerufen wird , sodass in der Befehlszeile gefragt wird, ob jede Datei gelöscht werden soll.
[ 1 ] Beachten Sie, dass dies das Problem mit visuell verwirrenden Zeichen wie Kyrillisch а
($ '\ U430') und Latein a
($ '\ U61'), die genau gleich aussehen, aber nicht gleich sind, nicht löst. Um die Bytes, die ein Dateiname verwendet, besser sehen zu können, müssen wir einen Hex-Viewer verwenden.
$ touch а a é $'e\U301' $'\U301'e
$ ls
a ́e é é а # what you "see" here depends on your system.
$ printf '<%s>' * | od -An -c
< a > < 314 201 e > < e 314 201 > < 303 251
> < 320 260 >
?
es sich nicht um ein nicht druckbares Zeichen,ls
das als dargestellt wird?
. Was ist die Ausgabe vonls | sed -n l
?