シェル応答文字セットで名前が付けられた Linux ファイルを削除します

シェル応答文字セットで名前が付けられた Linux ファイルを削除します

自分のソフトウェアをテストするために、 という名前のファイルを作成しました\;:$"\'。ファイル プロパティを削除できないため、エラーが発生しました。 を介して削除するための正確な文字の組み合わせを見つけようとしていますrmが、方法が見つかりません。

rm \\;:$\"\\\'
rm: cannot remove `\\': No such file or directory

rm "\\"\;:$\"\\\'
rm: cannot remove `\\;:$"\\\'': No such file or directory

rm '\;:$"\'''
rm: cannot remove `\\;:$"\\': No such file or directory

(この最後の試みは私を殺した)

その他にもたくさんの試みがあります。助けが必要です!

答え1

ファイル名が正確にある場合\;:$"\'、次のことを削除できるはずです。

rm \\\;\:\$\"\\\'

すべてのキャラクターをシングルでecapeするだけです\

答え2

ls -liファイルを含むディレクトリで、次のコマンドを発行して返されたinodeを持つファイルを削除してみてください。find . -inum <inode-number> -exec rm -i {} \;

-ifind コマンドで予想とは異なるファイルが見つかった場合に備えて、削除前にプロンプ​​トを表示するように find コマンドに追加しました。

コメントに加えて、私は自分でファイルを作成して削除しようとしました。

ls -l
total 0
-rw-r--r-- 1 test test 0 mrt 24 14:11 \;:$"\'

[test@testhost +1] /tmp/ff$ rm \\\;\:\$\"\\\' 

[test@testhost +1] /tmp/ff$ ls -l
total 0

答え3

一重引用符を使用すれば、一重引用符自体を引用符で囲むことだけを気にすればよいことになります。

rm '\;:$"\'\'

対話型で使用する場合は、'\またはで始まるタブ補完を単純に使用できます\\。 からのタブ補完は を生成します。'\これ'\;:$"\'\'''は、bash が埋め込まれたすべての一重引用符を に置き換えるだけだからです。 何も入力'\''しない、または からのタブ補完は を生成します。\\\\\;\:\$\"\\\'

答え4

bash または別のシェル スクリプト環境の使用に限定されていない場合、このようなファイルを削除する簡単な方法は、unlink()お気に入りの言語を呼び出すだけの短いプログラムを作成するか、Gnome Commander や Midnight Commander などのファイル マネージャーを使用して手動でファイルを削除することです。後者のオプションを使用すると、問題のファイルを選択して削除することができ、ファイル名をどこにも入力する必要がなくなるため、メタ文字が特別な意味を持つ可能性がまったくなくなります。

関連情報