Je peux juste pour vous garantir que le fichier n'avoir un nom. Il se trouve que c’est un nom qui contient des caractères non imprimables.
Si cela rm
n'a pas fonctionné, utiliser le résultat de find
l' -inum
option avec comme argument rm
ne devrait pas vous aider. il va juste passer le même argument à rm
, avec le même problème.
Le fichier est le seul dans ce répertoire, non?
La première chose que j'essaierais est d' cd
entrer dans le répertoire, puis de taper rm ./
puis d'appuyer sur la touche Tab. Cela devrait développer l'argument jusqu'au nom réel du fichier et le précédent ./
devrait empêcher rm
d'interpréter l'argument comme autre chose qu'un nom de fichier.
Une autre solution consiste à cd
utiliser le répertoire parent, puis à utiliser rm -r
(ou, si nécessaire rm -rf
) sur le répertoire. Cela devrait supprimer le répertoire et tout son contenu, quel que soit son nom. Vous pouvez ensuite utiliser mkdir
pour recréer le répertoire (et peut-être chmod
pour restaurer ses autorisations).
MODIFIER :
En regardant à ls -lb
nouveau votre sortie, je pense que le nom du fichier commence par un DEL
caractère ASCII (ce qui est mauvais, pas fatal) et contient un ou plusieurs caractères de nouvelle ligne (ce qui est vraiment mauvais). Autant que je sache, la rm
commande ne peut pas interpréter une nouvelle ligne comme faisant partie d'un nom de fichier.
Mais l' unlink()
appel système peut. Voici un script Perl que j’ai concocté et qui va parcourir les fichiers du répertoire courant et vous demander pour chacun d’eux si vous souhaitez le supprimer. Il n'utilise pas de commande externe comme rm
pour supprimer les fichiers. Il devrait donc être capable de gérer tous les caractères amusants pris en charge par le système de fichiers (tout ce qui est autre que ASCII NUL
et /
).
Faire rm -r
ou rm -rf
sur le répertoire contenant devrait toujours fonctionner, mais vous pouvez essayer ceci si vous voulez simplement supprimer un seul fichier.
#!/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;
}
(Une autre solution, s'il y a d'autres fichiers dans le répertoire que vous souhaitez conserver, consiste à déplacer tous les autres fichiers dans un répertoire temporaire, puis à supprimer et à recréer le répertoire, puis à déplacer les autres fichiers vers l'arrière.)
(Oh, et quoi que vous ayez fait pour créer ce fichier, essayez de ne pas le refaire!)
\177
est leDEL
caractère ASCII .