印刷されない文字を含むファイルを削除する[重複]

印刷されない文字を含むファイルを削除する[重複]

誤って生成されたため、非常に誤った名前のファイルが見つかりました。出力ls -lq

ls -lq
total 2
-rw-r--r--. 1 mbyx7ag2 zk01 0 May  1  2014 ???E@X?p@8?@

私はこれを殺そうと何度も試してみましたが、今まで役に立ちませんでした。lsファイルを表示して使用できるにもかかわらず、ファイルが存在しないためエラーが発生するたびにstat:

stat ^A?E\@X?p\@8^H\@ 
  File: `\001\360\265E@X\342p@8\b@'
  Size: 0           Blocks: 3          IO Block: 32768  regular empty file
Device: 1ah/26d Inode: 5239755888  Links: 1
Access: (0644/-rw-r--r--)  Uid: (231058/mbyx7ag2)   Gid: (10027/    zk01)
Access: 2014-05-01 15:47:28.638919596 +0100
Modify: 2014-05-01 15:47:28.638919596 +0100
Change: 2014-05-01 15:47:28.638919596 +0100

興味深いことに、そこにあるstatコマンドはタブの完成の結果であり、他の場所で使用されている名前とはまったく異なります。

私は次の質問のアイデアを試しました。

名前のないファイルを削除する方法

印刷できない文字のみを含むファイルを見つける方法はありますか?

私もこの2つの方法を試しました。ファイル名から印刷されない文字を削除する - Arctic Regional Supercomputing Center(「印刷されない文字の削除」の下)。

心配的には、inodeを使用するいわゆる「完璧な」技術は次のとおりです。

ls -i
5239755888 ???E@X?p@8?@
find . -inum 5239755888 -delete
find: cannot delete `./\001\360\265E@X\342p@8\b@': No such file or directory

動作しません。

このファイルを削除するために使用できる他の方法を知っている人はいますか?

ベストアンサー1

印刷した統計が正しいファイル名のようです(ディレクトリに保存されています)。

  File: `\001\360\265E@X\342p@8\b@'

以下を使用して名前(バイト単位)を再構成できます。

$ printf '%b' '\001\360\265E@X\342p@8\b@' | od -An -tx1
soh   p   5   E   @   X   b   p   @   8  bs   @
 01  f0  b5  45  40  58  e2  70  40  38  08  40

ご覧のとおり、文字列は制御文字(soh)または16進数0x01(8進数\ 001)で始まります。これは悪い結果(ファイルを消去するのが難しい)と良い結果(同じ名前のファイルがディレクトリに存在する可能性が低い)の両方を引き起こします。

(安全のため)すべての(その他)ファイルをディレクトリから移動した後。

rmを入力してからファイルの最初の文字(soh)を入力し、アスタリスク()を入力してファイルを削除してみることができます*(実行したものと同様)erase a*。タイピングのコツ0x01は と を同時に入力し Ctrl vと を入力することCtrlですA(交代不要)。^Aカーソル位置に表示する必要があります。次にアスタリスクを入力します*。コンソールに次の行が表示されます。

rm ^A*

次にEnterを押すとファイルが消えます。

それでもうまくいかないと(何度か試して)、常に核兵器ソリューションがあります。他のすべてのファイルを移動して削除し、親ディレクトリに変更したら、次の操作を行います。

rm -rf ./CorrectDirectory        ### Be careful this will erase ANYthing.

ディレクトリ全体(ファイルを含む)が消えます。

おすすめ記事