129 votes

FreeBSD : Répertoire appelé ^C (vraiment !) - comment le supprimer ?

J'ai fait une faute de frappe :

$ history
169 9:34    la /usr/local/etc/
170 9:35    sudo mkdir ^C
171 9:36    sudo mkdir /usr/local/etc/dnsmasq.d

Maintenant j'ai un fichier qui s'appelle ^C (ctrl+C) ! !! Lorsque j'utilise ls Je vois juste un point d'interrogation (probablement dû à la locale ?)

% ls -al
total 60
drwxr-xr-x  2 root   wheel    512 Jan 21 09:35 ?        <- this one
drwxr-xr-x  5 admin  wheel    512 Jan 21 16:24 .
drwxr-xr-x  3 root   wheel    512 Jan 20 14:29 ..
-rw-r--r--  1 admin  nobody  1114 Jan 20 19:10 .cshrc
-rw-------  1 admin  wheel   6002 Jan 21 15:27 .history
-rw-r--r--  1 admin  nobody   182 Jan 20 14:29 .login
-rw-r--r--  1 admin  nobody    91 Jan 20 14:29 .login_conf
-rw-------  1 admin  nobody   301 Jan 20 14:29 .mail_aliases
-rw-r--r--  1 admin  nobody   271 Jan 20 19:04 .mailrc
-rw-r--r--  1 admin  nobody   726 Jan 20 19:05 .profile
-rw-------  1 admin  nobody   212 Jan 20 14:29 .rhosts
-rw-r--r--  1 admin  nobody   911 Jan 20 19:06 .shrc
drwx------  2 admin  nobody   512 Jan 20 15:05 .ssh
drwxr-xr-x  2 admin  wheel    512 Jan 20 19:08 bin

% ls -i
3611537 ?   3611534 bin

Je veux supprimer ce fichier. J'essaie mv et en utilisant la complétion par tabulation, il me montre :

% mv
^C/  bin/

De toute évidence, je ne peux pas taper un ^C :-/ Comment supprimer ce fichier ?

11voto

calasyr Points 116

Vous pouvez utiliser Midnight Commander (mc) pour supprimer le fichier - il suffit de le sélectionner avec les boutons haut/bas et d'appuyer sur F8.

Je l'ai fait occasionnellement lorsque les noms de fichiers avaient des caractères étranges en raison de l'encodage.

7voto

nullnullnull Points 123

Une autre façon encore : utiliser stat pour obtenir une représentation échappée du nom du répertoire :

$ stat *|grep File:
  File: ‘\003’

Maintenant, vous connaissez une représentation du nom du fichier, donc vous pouvez supprimer le fichier par son nom en utilisant printf :

$ rmdir -v "$(printf '\003')"
rmdir: removing directory, ‘\003’

Ou, si vous utilisez bash, vous pouvez éviter printf :

$ rmdir -v $'\003'
rmdir: removing directory, ‘\003’

6voto

joeytwiddle Points 474

Une solution qui a fonctionné pour moi est la suivante :

rm ./[Tab][Tab][Tab]...

pour parcourir les fichiers disponibles jusqu'à ce que je trouve celui que je veux supprimer.

Mais vous devez avoir le paramètres nécessaires dans votre Shell pour que cela fonctionne.

5voto

Kondybas Points 6806

Le plus simple est de tout déplacer dans le répertoire temporaire et ensuite rm -r DIRNAME .

1voto

MauMen Points 531

Si c'est le seul répertoire vide (ou si vous ne vous souciez pas de supprimer les autres répertoires vides), *utiliser `rmdir /** . Vous obtiendrez des messages d'erreur dermdirsur le fait de ne pas pouvoir supprimer les répertoires non vides, mais c'est bon. GNUrmdirsoutient--ignore-fail-on-non-emptyou vous pouvez2>/dev/null` .

La queue / fait que le glob ne correspond qu'aux noms des répertoires.

Vous pouvez vérifier à l'avance quels répertoires vides existent sous le répertoire actuel en utilisant
find -maxdepth 1 -type d -empty -ls . (Et vous pouvez changer le -ls a -delete si vous le souhaitez).

Vous pouvez utiliser une expression globale plus spécifique comme rmdir [^A-Za-z0-9._]/ pour correspondre aux répertoires qui commencent par un nom de fichier non alphanumérique ou souligné. J'ai également inclus . mais les expressions globales ne correspondent pas . normalement de toute façon.


Comme d'autres l'ont fait remarquer, vous pouvez vous limiter à des noms à un seul caractère avec un glob de ? : rmdir ?/

rmdir n'a pas de -i option la manière rm le fait, vraisemblablement parce que les répertoires vides n'ont généralement pas de valeur et peuvent simplement être recréés.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X