web-dev-qa-db-ja.com

破損したディレクトリ、それらの削除に関する問題

いくつかのソフトウェアの誤動作のために、私のLinuxシステムにディレクトリがあります。以下に示すように、ジャンク名の付いたディレクトリがいくつか作成されます。削除に問題があります。

$ 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 ?????-

青色でディレクトリ名を見ることができるように。それらを削除したいとき、以下のエラーが発生します:

$ 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.

どうすればいいですか?

5
amir jj

lsは、ASCII以外の文字(または、現在のロケールでサポートされていない文字)を_?_として出力します。これが、lsの出力の解析が不適切な理由の1つです。 lsからの出力は、で表示されることを意図しています。このようないくつかのケースでは、これらはファイルシステムに存在する実際の名前ではありません。

代わりに(これらはallのファイルとディレクトリを削除します、_/path/to/dir_を含む)

_rm -rf /path/to/dir
_

または

_find /path/to/dir -delete
_

または

_find /path/to/dir -exec rm -rf {} +
_

または

_find /path/to/dir -print0 | xargs -0 rm -rf
_

ニーズに合わせて変更します。ファイルのみを削除するには、たとえば、findの例のパスの後に_-type f_を追加します。

そのディレクトリ内で_rm -rf *_だけを行う(それは重要です、現在の作業ディレクトリは、ファイルとディレクトリを削除するディレクトリでなければなりません)でも十分です。

参照 Whynotparse ls

11
Kusalananda

非印刷文字で名前が付けられたディレクトリやファイルを簡単に削除する別の方法は、エラーのあるディレクトリ(またはファイル)のiノード番号を確認し、それを使用してディレクトリ(またはファイル)を削除することです。

cd /mypath || exit 1
ls -il    #...to show the inode <number> in the leftmost column output
find . -xdev -inum <number> -exec rm -rf {} +

-xdevオプションは、findが他のファイルシステムのディレクトリを下らないことを保証します。 iノード番号は、ファイルシステム内でのみ一意であることが保証されています。

ファイルのみを返すには、追加のfindオプションとして「-f」を追加します。

4
JRFerguson