私のソフトウェアをテストするために、\;:$"\'
という名前のファイルを作成しました。ファイルのプロパティを削除できないため、エラーが発生しました。 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
(この最後の試みは私を殺しました)
そして他の多くの試み。助けが必要です!
ファイル名が正確に\;:$"\'
の場合は、次の方法で削除できます。
rm \\\;\:\$\"\\\'
1つの\
ですべての文字をエスケープするだけです。
ファイルを含むディレクトリでls -li
を試し、find . -inum <inode-number> -exec rm -i {} \;
を発行してiノードが返されたファイルを削除できます。
予想よりも別のファイルがfindコマンドで見つかった場合に備えて、削除する前にプロンプトを表示するfindコマンドに-i
を追加しました。
コメントに加えて、私は自分でファイルを作成して削除しようとしました。
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
一重引用符を使用でき、一重引用符自体を引用することだけを心配する必要があります。
rm '\;:$"\'\'
インタラクティブな使用では、'\
または\\
で始まるタブ補完を使用できます。 '\
からのタブ補完は、'\;:$"\'\'''
を生成します。これは、bashがすべての埋め込まれた一重引用符を'\''
に置き換えるだけだからです。何もないところから、または\\
からタブを補完すると、\\\;\:\$\"\\\'
が生成されます。
Bashおよび同様のシェルで
read -r; rm "$REPLY"
次に、ファイル名を文字通り\;:$"\'
と入力し、Enterキーを押します。 read
コマンドは、標準入力から行を読み取り、それを変数REPLY
に保存します。 -r
フラグは、行を文字通り読み取り、バックスラッシュをエスケープシーケンスとして解釈しないように指示します。 $REPLY
を引用すると、REPLY
の内容が単一の引数としてrm
に渡されるため、ファイル名にスペースやタブが含まれている場合でも機能します。
(注:ファイル名に改行文字が含まれている場合は、-d
オプションをread
に使用して、入力する文字列の終了文字を変更できるようです。)
Bashまたは別のシェルスクリプト環境の使用に限定されていない場合、そのようなファイルを削除する簡単な方法は、お気に入りの言語でunlink()
を呼び出すだけの短いプログラムを作成するか、ファイルを使用することです。ファイルを手動で削除するGnomeCommanderやMidnightCommanderなどのマネージャー。後者のオプションを使用すると、ファイル名をどこにも入力しなくても、問題のファイルを選択して削除できます。これにより、メタ文字が特別な意味を持つ可能性がまったくなくなります。
これを試して、
$ rm \\\;\:\$\"\\\'
「\」は、文字通りの意味を持つbashスクリプトのエスケープシーケンスとして使用されます。
このような場合、最大で数文字を入力/エスケープしてから、bashに<TAB>
を使用してコマンドを完了させるのが最も簡単だと思います。bashは、それ自体の目的に適したものを引用するようにします。
この場合、私がそうするなら
touch '\;:$"\'\'
rm \ <TAB>
繰り返される<TAB>
の完了は、その後
rm \\
rm \\\\
rm \\\\\\\\
rm \\\;\:\$\"\\\'
今、私は実際には中間段階を説明するのに少し戸惑っていますが、最終的な提案は賢明です。
補完を使用しない場合の経験則として、私はそれを'...'
マークに含めることによってすべてを引用する傾向があります。明らかに、'
自体を'\''
として書き込む必要があります。つまり、引用符を終了し、\;
を書き込んで単一の'
を生成し、別の引用符で囲まれた文字列を再入力します。これは、何も追加されないため、最終結果の''
を省略することを除いて、touchコマンドに使用したレシピです。
もう1つの良い解決策は、インストールすることです oh-my-zsh 、
typerm、およびtabをファイルに追加削除したい。 ;)