Ich kann Ihnen nur garantieren , dass die Datei hat einen Namen hat. Es ist einfach ein Name, der nicht druckbare Zeichen enthält.
Wenn rm
dies nicht funktioniert hat, hilft es wahrscheinlich nicht, die Ausgabe von find
mit der -inum
Option als Argument für rm
zu verwenden. Es wird nur das gleiche Argument rm
mit dem gleichen Problem übergeben.
Die Datei ist die einzige in diesem Verzeichnis, oder?
Das erste, was ich versuchen würde, ist, cd
in das Verzeichnis zu gehen, es einzugeben rm ./
und dann die Tabulatortaste zu drücken. Dadurch sollte das Argument auf den tatsächlichen Namen der Datei erweitert werden, und das Vorhergehende ./
sollte verhindern rm
, dass das Argument als etwas anderes als ein Dateiname interpretiert wird.
Eine andere Lösung besteht darin, cd
in das übergeordnete Verzeichnis zu wechseln und dann das Verzeichnis rm -r
(oder, falls erforderlich, rm -rf
) zu verwenden. Das sollte das Verzeichnis und seinen gesamten Inhalt unabhängig vom Namen entfernen. Sie können dann verwenden mkdir
, um das Verzeichnis neu zu erstellen (und möglicherweise chmod
seine Berechtigungen wiederherzustellen).
EDIT:
Bei ls -lb
nochmaliger Betrachtung Ihrer Ausgabe denke ich, dass der Dateiname mit einem ASCII- DEL
Zeichen beginnt (was nicht schlimm ist, nicht schwerwiegend) und ein oder mehrere Zeilenumbrüche enthält (was wirklich schlimm ist). Soweit ich rm
weiß , kann der Befehl einen Zeilenumbruch nicht als Teil eines Dateinamens interpretieren.
Aber der unlink()
Systemaufruf kann. Hier ist ein von mir zusammengestelltes Perl-Skript, das die Dateien im aktuellen Verzeichnis durchläuft und Sie nach jedem fragt, ob Sie es entfernen möchten. Es wird kein externer Befehl rm
zum Entfernen der Dateien verwendet. Daher sollte es in der Lage sein, alle vom Dateisystem unterstützten komischen Zeichen (außer ASCII NUL
und /
) zu verarbeiten.
Tun rm -r
oder rm -rf
auf dem enthaltenden Verzeichnis sollte immer noch funktionieren, aber wenn Sie nur eine einzelne Datei entfernen möchten, können Sie dies versuchen.
#!/usr/bin/perl
use strict;
use warnings;
opendir my $DIR, '.' or die ".: $!\n";
my @files = sort grep { -f } readdir $DIR;
closedir $DIR;
foreach my $file (@files) {
my $pfile = printable($file);
print "Remove $pfile? ";
my $answer = scalar <STDIN>;
if ($answer =~ /^[Yy]/) {
print "Removing $pfile\n";
unlink $file or warn "Unable to remove $pfile: $!\n";
}
}
sub printable {
my($s) = @_;
$s =~ s/[^ -~]/?/g;
return $s;
}
(Eine andere Lösung, wenn das Verzeichnis andere Dateien enthält, die Sie behalten möchten, besteht darin, alle anderen Dateien in ein temporäres Verzeichnis zu verschieben, das Verzeichnis zu speichern und neu zu erstellen und die anderen Dateien zurück zu verschieben.)
(Oh, und was auch immer Sie getan haben, um diese Datei zu erstellen, versuchen Sie es nicht noch einmal!)
\177
ist das ASCII-DEL
Zeichen.