Bashを使用してすべての隠しファイルとディレクトリを削除する方法は?


28

明らかな解決策は、1の終了コードを生成します。

bash$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
bash$ echo $?
1

可能な解決策の1つは「。」をスキップします。および「..」ディレクトリがありますが、名前が3文字より長いファイルのみを削除します。

bash$ rm -f .??*

削除できないのではないかと心配していなければ。&..誰が気にしますか?スクリプトのい出力が気にならない限り、明らかな解決策は他の人よりもかなり率直に入力することです。
マット

ご存知のとおり、..と。ファイルではありません。それらはディレクトリへの参照です。。(1つのドットのみ)は現在のディレクトリであり、..(2つのドット)は1レベル上のディレクトリへのリンクです。たとえば、cd / home / userの場合、は/ home / userと等しく、..は/ home /です。つまり、。は削除できません。および..(。?)
phuzion 2009

コメントマットに感謝します。コマンドごとの終了コードチェック(set -e)を使用して、スクリプトでコマンドをよく使用します。これらの場合、指示的な終了コードが必要です。
ヨナタンブロザ09

に固有のものはありません。そして.. rm -rfで削除からそれらを保護します。これは、rmの最新のバリエーションに追加された単なる保護メカニズムです。
クバンチク2009

そして、常にrm -rf。* ||があります。その1つのステートメントのset -e動作を回避したい場合はtrue。
ドミンゴイグナシオガルドス

回答:


34
rm -rf。[^。]。?? *

すべてのケースをキャッチする必要があります。。?? *は(前の回答で説明したように)3文字以上のファイル名にのみ一致し、。[^。]は任意の2文字のエントリ(..以外)をキャッチします。


答えてくれてありがとう!それに基づいて、「rm -rf。[^。] *」の短いバージョンにも到達しました。
ヨナタンブロザ2009

4
その短いバージョンには注意してください。似たような結果になりますが、同一の結果にはなりません。前面に2つのドットがある名前とは一致しません(ルートキットを隠すなどで時々見られる「... /」など)
ラッセルハイリング

そして、すべての設定を失うPWDチェックまたはuを作るように注意してください:)
kommradHomer

これはうまくいかないようですzsh。助言がありますか?
ryanjdillon 16

ではzshデフォルトでは空のワイルドカードマッチはエラーとして扱われます。一方、bashそれは単に変更されずに渡されます。作成するにはzsh、コマンドを使用することができます同じように振舞うunsetopt nomatch
ラッセルHeilling

1
find -path './.*' -delete

これは、aで始まる現在のディレクトリ内のすべてのファイルと一致し、.これらを再帰的に削除します。非隠しディレクトリ内の隠しファイルは変更されません。

ディレクトリからすべてを完全に消去したい場合は、find -deleteこれで十分です。


これにより、すべてではなく、すべてのエントリが削除されます.
-kasperd

ああ、質問を「隠しファイルを含むすべてを削除する」と誤解しているようです。
フリッツ

@kasperdありがとう、今では実際に質問に答えるはずです。
フリッツ

0

おそらく最善の方法は次のとおりです。

  • 見つける。-iname。* -maxdepth 1 -type f -exec rm {} \;

削除するものを確認したい場合は、rmls -lに変更し、出力を詳細に表示するには、-vオプションをrmに追加します。

  • -type fオプションは、ファイルのみを検索するようにfindコマンドに指示します(dirs、リンクなどを省略します)
  • -maxdepth 1は、サブディレクトリに移動しないようにfindに指示します

追伸 「\;」の終わりを忘れないでください


1
気をつけて!-iname '。*'または-iname。*を意味します。さもなければ、にドラッグします。そして..とにかく再び。
ドミンゴイグナシオガルドス

-1
ls -la | awk '$NF ~ /^\.[^.]+/  {print $NF}' | xargs rm -rf

ls -la ............. long list (all files and folders)
$NF ................ last field (file or folder name)
~   ................ Regular Expression match
/^\.[^.]+/ ......... dot followed by not dot at least once +

If the last field $NF match pattern show it and send 
it to xargs which will perform the task.

これにより、名前に空白文字が含まれるファイルがある瞬間が壊れます。
CVn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.