誤って生成されたため、非常に誤った名前のファイルが見つかりました。出力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.
ディレクトリ全体(ファイルを含む)が消えます。
答え2
名前の実際の文字を知っているので、次の説明に従ってファイル名の正しいエスケープシーケンスを作成するだけです。http://tldp.org/LDP/abs/html/escapingsection.html
作る
$ echo test > $'\001\360\265E@X\342p@8\b@' $ stat $'\001\360\265E@X\342p@8\b@' Fichier : ''$'\001\360\265''E@X'$'\342''p@8'$'\b''@' Taille : 5 Blocs : 8 Blocs d'E/S : 4096 fichier Périphérique : 10302h/66306d Inœud : 6948089 Liens : 1 Accès : (0640/-rw-r-----) UID : ( 1001/username) GID : ( 1003/jrousseau) Accès : 2018-06-20 11:40:44.333208199 +0200 Modif. : 2018-06-20 11:40:47.589113454 +0200 Changt : 2018-06-20 11:40:47.589113454 +0200 Créé : -
削除
$ rm -i $'\001\360\265E@X\342p@8\b@' rm : supprimer fichier ''$'\001\360\265''E@X'$'\342''p@8'$'\b''@' ? y $
答え3
簡単な方法はmc
。
あなたの場合はstat
ファイルを見ることができますが、rm
見ることはできません。これはとても奇妙です。これは実際にはファイルシステムに問題がある可能性があります。 (努力していますfsck
。)
strace
さらなるデバッグのために、あるコマンドはファイルを見ることができ、他のコマンドは見ることができない理由を調べることができます。
別のアイデアは、rm -r
ディレクトリ全体を削除することです。 (おそらく、内部の重要なファイルをすべてバックアップした後です。)
答え4
- ディレクトリ内のすべてのファイルを一覧表示し、名前をfile_listに保存します。
- 削除するファイルを除くすべてのファイルを削除するには、file_listを編集します。
for f in \`cat file_list\`
do
/bin/rm -i $f # option i to be extra safe
done