ワイルドカードを使用して、最初または最後を除いて、文字列を埋め込み文字列として含むファイルを削除するにはどうすればよいですか。
私は1か月足らずでUbuntuを始めたアマチュアです。
rm ?*foo?*
前後に少なくとも1文字ある場合は、fooを含むファイルを削除します。したがって、「foobar」と「barfoo」は削除されませんが、「barfoobar」は削除されます。
予防措置として、
ls ?*foo?*
まず、間違ったものを削除していないことを確認します。また、 rm?* foo?*はほぼ間違いなく非常に悪いので、誤ってスペースを含めないように十分注意してください。ある程度の保護を提供するには、引数を引用符で囲みます。
rm "?*foo?*"
これは単一の拡張パターンでは不可能だと思います。grep
代わりにフィルタリングに使用できます。
ls -d '*foo*' | egrep -v '^foo|foo$' | xargs rm
したがって、ls
を含むすべてのものをリストし、最初/最後に一致するファイルを削除し、最後にfoo
残りの各ファイルに対してコマンド(この場合)を実行します。egrep
xargs
rm
この手法の危険な点は、ファイル名に改行やアスタリスクなどの特殊文字が含まれている可能性があるため、自己責任で使用してください。