web-dev-qa-db-ja.com

Linuxを使用してファイルという名前の$記号を削除できませんか?

これが私のlsコマンドで、現在のディレクトリにあるファイルのリストを表示します。

rper:  ls -l

$commandoutput[0]  
file.txt

$commandoutput[0]を使用してrm -rf $commandoutput[0]行を削除しようとしましたが、次のエラーが表示されます。どうすれば削除できますか?

rper: rm -rd $commandoutput[0]
commandoutput: Undefined variable.
4
salma

逃れる $(そして望ましくは[])バックスラッシュでファイル名をサインインします\

rm -rf \$commandoutput\[0\]
20
RomanPerekhrest

@RomanPerekhrestの回答の代わりに、これも機能します。

rm '$commandoutput[0]'  

一重引用符は変数の展開を回避するためです。

もう1つの方法は、rm $と入力してから、 Tab;シェルはファイル名をオートコンプリートし、必要に応じて文字をエスケープします。

27
dr_

他の人がこの質問に答えていますが、これを行う別の方法は、ファイルのiノードを見つけ、findとexecdeleteを使用してファイルを削除することです。

ls -il

サンプル出力:

781956 drwx------  3 viv viv 4096 2017-07-7 15:05 $commandoutput[0] 

最初の列はiノードである必要があります。上記の例では、次のように実行します。

find . -inum 781956 -exec rm -i {} \;
1
Jim Gorski

もう1つの簡単な方法は、ワイルドカードとrm-iを使用することです。

rm -i *command*

これにより、「コマンド」という単語を含むすべてのファイル名について、ファイルを削除するかどうかを尋ねられます。その後、削除する前に確認できます。

0
Bob Eager