私の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.
どうすればいいですか?
答え1
ls
非ASCII文字(または現在のロケールでサポートされていない文字)をとして印刷します。これが解析された出力が悪い?
理由の1つです。ls
出力は次のようにls
する必要があります見ている。このような場合は、ファイルシステムに存在する実際の名前ではありません。
次のようにしてみてください(これを行うと削除されます)。みんな/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
必要に応じて修正してください。たとえば、ファイルのみを削除する場合は、例のパス-type f
の後に追加してください。find
ただrm -rf *
このディレクトリ内で(それは重要、現在の作業ディレクトリは、ファイルとディレクトリを削除するディレクトリでなければなりません)で十分です。
また、見ることができますなぜいいえ分析ls
?
答え2
印刷できない文字で指定されたディレクトリおよび/またはファイルを簡単に削除するもう1つの方法は、間違ったディレクトリ(またはファイル)のinode番号を確認し、それを使用してディレクトリ(またはファイル)を削除することです。
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
他のファイルシステムのディレクトリは削除されません。ノード番号はファイルシステム内でのみ一意であることを保証します。
find
ファイルのみを返すには、追加オプションとして「-f」を追加してください。