Mac OS X端末で、すべてのファイルとフォルダを削除するコマンドは何ですか?


0

Mac OS X端末で、隠しフォルダを含むすべてのファイルとフォルダを、1つのディレクトリを除いて再帰的に削除する方法を教えてください。

ありがとうございました。

回答:


3

警告: 再帰的にファイルを削除するためのコマンドを実行するのは危険です。常に、そのような危険なコマンドを盲目的に実行する前に、常にテストしてください。 決して rootユーザーとして(またはsudoなどで)実行してください。

これは、ちょっとしたbashを使って行うのは比較的簡単です。あなたがこれをたくさんやろうとしているならば、あなたはそれをあなたが渡す引数にすることさえできます。しかし、一時休止のために、以下の私の簡単なテストのようなものを試してください。

まず、テスト用のフォルダをいくつか作成します。

cd test; mkdir -p one two three four five six .hidden

次に、次の内容でbashスクリプト(この場合はrm.bash)を作成します。

for i in `ls -A`
do      
        if [ ! "${i}" == 'three' ] && [ ! "${i}" == $0 ]; then 
                echo "would delete ${i}" 
        else    
                echo "not deleting ${i}" 
        fi
done

説明する: ls -A 現在のフォルダとその親フォルダ以外のすべてのファイルを印刷します( . そして .. )このリストを for すべての内容を繰り返すためにループします。私は(任意に)私たちが残す唯一のフォルダは "3"であり、私は削除したくないと判断しました rm.bash スクリプト自体。

従って if 問題のファイル/フォルダに名前が付いていない限り、条件は真になります。 three または rm.bash$0 これは、あなたがファイルを何を呼び出しても機能することを意味します。

すぐにこれを実行するのではなく rm -rf ${i} (これは危険です)、私は代わりに2、3を使用しました echo 何が削除され、何が削除されないのかを示すコマンド。

これが私の出力例です。

would delete five
would delete four
would delete one
not deleting rm.bash
would delete six
not deleting three
would delete two

スクリプトが正しい動作をしているべきであることを確認したら、それがしてはいけないことなどを削除しないで、あなたはこれにコードを変更することができます:

for i in `ls -A`
do      
        if [ ! "${i}" == 'three' ] && [ ! "${i}" == $0 ]; then 
                rm -rf ${i} 
        fi
done

1

代替案です。 @Adam Cの答えと同じ警告が適用されます。テストせずにこれを実行しないでください。

いくつかのデモデータ:

$ mkdir testing; cd testing
$ mkdir one two three four "fi ve"
$ touch one/one.txt two/two.txt three four/keep.txt fi\ ve/.hidden

4つを除くすべての削除をシミュレートする/

$ find . -mindepth 1  -path ./four -prune -o -exec echo would remove "{}" +

出力:

would remove ./fi ve ./fi ve/.hidden ./two ./two/two.txt ./one ./one/one.txt ./three

ノート:

-mindepth 1  prevents including /.
Prune removes path four/ from processing, or...
-o means "or" (either prune the left, or exec on the right)
High speed / low resource use:
  find will stop processing a tree once pruned (no wasted operations)
  One xargs-style list is built (with +), removal happens in one command.
  To process one at a time, replace + with \;
Spaces are handled correctly within " "
-delete is shorter but may not operate on directories
find won't follow symlinks by default
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.