
次の名前のファイルをすべて削除する必要があります (引用符は名前の一部です)。
'index.html?some-query-string'
私は以下を試しました:
rm \'index.html?*\'
次のエラーが発生します:
rm: cannot remove ''\''index.html?*'\''': No such file or directory
答え1
分析
引用符は名前の一部です
本当に?どうしてわかるの?これがある現代のGNUの「機能」ls
、内部に のような文字がある名前には、追加の引用符が付きます?
。そのため、まったくの素人がコピー アンド ペーストし'index.html?some-query-string'
て実行するとrm 'index.html?some-query-string'
、これは正しい安全なコマンドになります。
残念ながら、一部の文字を引用符/エスケープする必要があることを知っている、より経験豊富なユーザーを混乱させる可能性があります。コマンドrm
( rm \'index.html?*\'
) は、引用符付きの名前には適しています。これは、?*
glob パターンであるため、より多くのファイル名に一致する可能性があります。「すべてのファイルを削除する必要がある」と書かれているので、これが必要な操作だと思います。コマンドが示した事実から、No such file or directory
既存の名前は確かに異なるものだと思います。
これを確認するには、 を実行しますls -N
。このコマンドが成功し、次のような名前が出力された場合は、index.html?some-query-string
引用符なしそれからこれら実名です。
解決
回答のこの部分では、お使いのシステムls
が最新の GNUls
または同様に「スマート」であると想定しているため、問題の引用符はファイル名に属していません。
'index.html?some-query-string'
特定のファイルを削除するには、 "smart" の出力を見る完全な素人として行動するか、引用符の必要性を認識しているユーザー (あなたはそうだと思います) として、出力をls
見るようにしてください。次を実行します。index.html?some-query-string
ls -N
rm 'index.html?some-query-string'
または、名前が で始まるすべてのファイルを削除する場合index.html?
:
rm 'index.html?'*
シェルは引用符を削除するので、 には到達しませんrm
。一重引用符は?
ワイルドカードとして扱われず、文字どおりに に渡されますrm
。引用符なしは*
ワイルドカードとして扱われ、任意のクエリ文字列と一致し、シェルは一致するファイル名を複数引数として に渡しますrm
。
答え2
'
がファイル名の一部である場合は、" "
コマンドの名前パターンを渡すために find コマンドを一緒に使用することをお勧めします。
使用できる例は次のとおりです。
find . -maxdepth 1 -type f -name "'index.html?*'" -exec rm {} \;