Il y a un directory dans mon système Linux en raison d'un dysfonctionnement du logiciel certains directorys avec le nom indésirable comme vous pouvez le voir ci-dessous est créé, j'ai un problème pour les supprimer,
$ ll total 1532 drwxr-xr-x 2 sensage sensage 4096 Apr 19 16:56 -?$?? drwxrwxr-x 248 sensage sensage 4096 Apr 23 11:37 . drwxrwxr-x 99 sensage sensage 4096 Apr 16 14:23 .. drwxr-xr-x 2 sensage sensage 4096 Apr 6 14:54 }???;? drwxr-xr-x 2 sensage sensage 4096 Apr 19 03:01 }??=?| -rw-r--r-- 1 sensage sensage 88 Apr 22 13:37 $ drwxr-xr-x 2 sensage sensage 4096 Apr 2 12:43 ? drwxr-xr-x 2 sensage sensage 4096 Mar 20 02:51 ?=??&? drwxr-xr-x 2 sensage sensage 4096 Apr 11 08:40 ?;%??; drwxr-xr-x 2 sensage sensage 4096 Apr 14 09:38 ?:???? drwxr-xr-x 2 sensage sensage 4096 Mar 22 17:21 ?(?>~? drwxr-xr-x 2 sensage sensage 4096 Apr 1 13:45 ?[???% drwxr-xr-x 2 sensage sensage 4096 Apr 3 14:03 ?@???? drwxr-xr-x 2 sensage sensage 4096 Apr 12 16:18 ?? drwxr-xr-x 2 sensage sensage 4096 Apr 17 16:38 ??&??? drwxr-xr-x 2 sensage sensage 4096 Mar 25 02:43 ??+??? drwxr-xr-x 2 sensage sensage 4096 Apr 19 00:46 ܡ?,?? drwxr-xr-x 2 sensage sensage 4096 Mar 28 18:54 ڟ??"? drwxr-xr-x 2 sensage sensage 4096 Mar 27 01:04 ???(? drwxr-xr-x 2 sensage sensage 4096 Apr 19 22:41 ??ͨ?` drwxr-xr-x 2 sensage sensage 4096 Apr 15 11:44 ?????-
comme vous pouvez voir les noms de directory en bleu. quand je veux les supprimer, j'obtiens l'erreur suivante:
$ ls -1 | grep -v 20 | xargs rm -rf xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option rm: invalid option -- ¼ Try `rm ./'-¼$Þ¸Í'' to remove the file `-\274$\336\270\315'. Try `rm --help' for more information.
que dois-je faire avec eux?
ls
imprimera des caractères non-ASCII (ou plutôt, des caractères non pris en charge dans les parameters régionaux en cours) comme ?
. C'est l'une des raisons pour lesquelles l'parsing de la sortie de ls
est une mauvaise chose à faire. La sortie de ls
est censée être regardée . Dans certains cas, comme cela, ce ne sont pas les noms réels qui existent dans le système de files.
Essayez à la place quelque chose comme (ceux-ci vont supprimer tous les files et directorys, y compris /path/to/dir
)
rm -rf /path/to/dir
ou
find /path/to/dir -delete
ou
find /path/to/dir -exec rm -rf {} +
ou
find /path/to/dir -print0 | xargs -0 rm -rf
Modifier pour s'adapter à vos besoins. Pour supprimer uniquement des files, ajoutez -type f
après le path dans les exemples de find
, par exemple.
Faire juste rm -rf *
intérieur de ce directory (c'est important , le directory de travail actuel doit être le directory dont vous voulez supprimer les files et les directorys).
Voir aussi Pourquoi ne pas parsingr ls
?
Une autre méthode pour supprimer facilement des directorys et / ou des files nommés avec des caractères non imprimables consiste à vérifier le numéro d'inode des directorys (ou des files) errants et à l'utiliser, supprimer le directory (ou le file):
cd /mypath || exit 1 ls -il #...to show the inode <number> in the leftmost column output find . -xdev -inum <number> -exec rm -rf {} +
L'option -xdev
assure que find
ne descend pas les directorys sur d'autres filesystems. Les numéros d'inode sont garantis uniques dans un système de files.
Ajoutez '-f' comme option de find
supplémentaire pour ne renvoyer que des files.