プログラムが正しく実行されないため、私のホームディレクトリにはドットで始まり、スペースやアスタリスクを含む奇妙なシンボルを含む多くのファイルがあります。このファイルを削除したいのですが、削除に問題があります。この質問は次のようになります。スペースと句読点を含むファイルの名前を変更するしかし、もっと悪いです。手動で削除するにはファイルが多すぎるため、パターンマッチングを使用する必要があります。
ほとんどのファイルは次から始めて.txt}
含めます18Jun22h
(ディレクトリにはこれらの文字列の1つを含めたいファイルはありません)。ディレクトリ内のファイルが確かに良いUnix名ではない場合、この文字列を含むすべてのファイルをどのように削除できますか?代わりに、ドット、スペース、アスタリスク、角かっこ、ダッシュが含まれます。私の最初の試みは、おそらく名前にこれらのシンボルがあるので失敗したでしょう。
ファイルが多すぎて1つずつ削除する方法はまったく役に立ちません。
はい、UNIXと互換性のないファイルを使用しない方が良いことがわかります。これが私が守るルールでもある。ただし、スクリプトが期待どおりに動作しません。
もう一度考えると、特定の時間の間に作成されたすべてのファイル(特定のディレクトリにある)を削除するのが簡単になる可能性があります。これにご協力いただきありがとうございます。
システム:Fedora 27
私はそれを試しましたが、 ~/*18Jun22h*
引数が長すぎるというエラーは、ファイル名の*拡張子と奇妙な作業に関連していると思います。代わりに、このパターンに一致するファイルが多すぎるからです(そうですか?)。 (RMが処理できるファイル数に上限があることを知りませんでした)。
答え1
ホームディレクトリに少なくとも1つのスペースを含むファイルを見つけるには(専用):
find "$HOME" -maxdepth 1 -type f -name '*[ ]*'
...次の1つ以上を含めます*
。
find "$HOME" -maxdepth 1 -type f -name '*[*]*'
...最小[
または以下を含みます]
。
find "$HOME" -maxdepth 1 -type f -name '*[\[\]]*'
...上記の項目の1つが含まれています。
find "$HOME" -maxdepth 1 -type f -name '*[ *\[\]]*'
これらのファイルを削除するには、コマンドの-delete
最後に追加するか-exec rm {} +
。
find
サポートされていないシステムでは、-maxdepth 1
ホームディレクトリから実行してください。
find . -type d ! -name . -prune -o -type f -name '*[ *\[\]]*' -print
答え2
.txt}
これらのどれもシェルに特別なものではありません(開かれた括弧なし)。
rm ~/.txt}* ~/*18Jun22h*
または多すぎる場合は、分割して使用してください。
rm ~/.txt}*
rm ~/*18Jun22h*
答え3
見積もりをインポートしてエクスポートできます。
たとえば、で始まるファイルを削除するには、*
次のようにします。
rm "*"*
echo
まず練習してくださいecho "*"*
答え4
方法1:使用./
rm -f ./'file name'
そしてrm -f ./'file*name'
方法2:インデックスノードの使用:
インデックスノードのインポートls
ls -i "file name"
それから
find . -inum "numberoofinode" -exec rm {} \;