変な名前のファイルを削除するには?


33

POSIXメモリマッピング機能を使用するプログラムを作成しました(mmap

プログラムはファイル(a.dat)を取得し、読み取り/書き込み用にメモリマップします。

プログラムのエラーが原因で、プログラムを実行するたびに、奇妙な名前(例:)のファイル?d?P?^z??d?P?^z?が作成されます。エラーは解決しましたが、ファイルを削除できません。

コマンドラインを使用するか、ウィンドウマネージャから選択/削除することで削除できません。

それでは、どうすれば削除できますか?Ubuntu 11.04を使用しています。


1
ファイル名を簡単に入力できない場合でも、グラフィカルファイルマネージャーからファイル名を削除しても問題はありません。どのようなエラーが発生していますか?
トーマス

2
@Aditya、名前を単一引用符(rm '?d?P?^z??d?P?^z?')でエスケープするときに、コマンドラインからそのようなファイルを削除しても問題ありません。試しましたか?
フレデリック・ハミディ

グラフィカルウィンドウマネージャーから削除すると、ファイル 'filename'を削除できないというだけです。@FrédéricHamidi 1つのファイルを削除してくれてありがとう。しかし、「?m?P ???)?m?P ???)」という名前のもう一方は削除されません...エラーメッセージは「rm: `?m?P ???)?m ?P ???) ':そのようなファイルやディレクトリはありません」
AK

1
@Aditya、他のファイルは名前に印刷できない文字が含まれている必要があります。次の手順を試してください。1 /すべての有効なファイルをそのフォルダーから移動し、2 /フォルダー内で発行rm *します。
フレデリックハミディ

1
ファイル名を入力するときは、引用符で始めて、機能したらすぐに(1文字または2文字の後)自動補完を使用してください。自動補完は、[tab]キーを押してシェルに名前を自動補完させます。この方法で、名前を正しくエスケープすることができます。

回答:


45

rm -i -- *各ファイルを削除するように求められます。多くのファイルがある場合、「*」をより狭い一致に変更できます。--名前のファイルはので、オプションの処理を停止-dすることによって除去されますrm成功しました。

私はそれを過去に使用しましたが、あなたが特別なキャラクターまたはそれが好きではない2を打つまで機能します。


1
これは、たとえば-dという名前のファイルでは機能しません。
SCO

2
それはあなたのためではない作業を行い、お使いのバージョンに応じて、場合@SCOはrm、あなたが行うことができますRMの一部のバージョンを伝えていない多くのコマンドラインラインが後にスイッチがあると、ファイル名として、さらに引数を処理すること。rm -i -- *----
JimR

1
使い方:私はこの答えは@JimRによって提案されたコメント含めるべきだと思う--rmコマンドを。
フェリペアルバレス

16

ls -liiノードごとにすべてのファイルを表示するために使用できます。次に、このコマンドを実行してファイルを削除します。

find . -inum ${INODE_NUM} -delete

-maxdepth 1安全のために、検索結果に追加しました。

find . -maxdepth 1 -inum ${INODE_NUM} -delete

1
厳密に言えば、ls -i十分です。
スコット

lsファイルを削除しません。OPはこれを望んでいます。
フェリペアルバレス

4
答えの最初の行には、「ls -liすべてのファイルをiノードで表示するために使用できます」と書かれています。これはls -i、ファイル名とそれに対応するiノード番号のリストを取得するのに十分です。(ただしls -ia、ドットファイルを含める場合はもちろん必要です。)
スコット

間違ったファイル名の使用を最小限に抑えるために、単に-deleteオプションをfindに渡すことをお勧めします。
ScumCoder
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.