意志 rm -rf *
現在のディレクトリ内のすべてのファイル/フォルダを削除しますか?ワイルドカードを確実にしたい *
上のディレクトリに移動してファイルシステムをすべて消去することはしません。 :D
覚えてる chmod 777 .* -R
に chmod
隠しファイルとそれ chmod
私のすべてのファイルシステムを編集しました。明らかに、私はrootアカウントにいました。
意志 rm -rf *
現在のディレクトリ内のすべてのファイル/フォルダを削除しますか?ワイルドカードを確実にしたい *
上のディレクトリに移動してファイルシステムをすべて消去することはしません。 :D
覚えてる chmod 777 .* -R
に chmod
隠しファイルとそれ chmod
私のすべてのファイルシステムを編集しました。明らかに、私はrootアカウントにいました。
回答:
いいえ、あなたがあなたのシェルをあまりひねらなかったなら、これはaで始まるファイルやディレクトリを削除しません。 .
。それらを削除するには、それらを明示的にリストすることもできます。
rm -rf .file .dir
または正しいグロブパターンを使用する(Chrisに感謝)
rm -rf .[^.]* ..?*
編集 ここでのポイントはあなたが使用できないということです .*
のようなファイルに一致させる .file
なぜなら .*
または .*?
また一致します ..
または .
。 .[^.]*
好きなファイルにマッチ .file
その間 ..?*
好きなファイルにマッチ ..foo
( *
ゼロ個以上の文字と一致します。 ?
正確に1つに一致します。
..?*
「..」で始まるエントリを捕らえる(例: ..foo
)
rm
。そのため、ディレクトリの内容を*で削除するのは賢明な方法ではありません。
xargs
この質問の範囲を少し超えています。例えば、シェルが引数リストの長さを訴えたとき、それについて考え始めてください。
ディレクトリとその内容をすべて削除したい場合は、 chdir
親ディレクトリに rm -rf
そのディレクトリを名前で、グロビングの質問全体を迂回して。内容を削除してディレクトリを保持する場合は、すべてを削除してからディレクトリを再作成するのが最も簡単です。
すべての可能なディレクトリエントリを保存するグロブを考え出すのは複雑です。そして、簡単な答えを思いつくのは簡単です(例: * .??*
)それは実際にはほとんどいつもうまくいくでしょう。これは対話的な使用には問題ありません。覚えておくのが簡単で、うまくいかない時はpost-rmで捕らえることができます。 ls -a
。スクリプトの場合は、すべて削除して空のディレクトリを再作成する方が簡単です。
この質問は*が何をするのか(rmではなく)に関するものだと思うので、別の方法を試してみましょう。
*が何をするのかわからない場合は、まずechoのような無害なコマンドを使って "テスト"できます。 あなたがこれを実行する前に、あなたがあなたのホームディレクトリでそれらを実行した場合、彼らが何を表示するのか推測してみてください。
echo *
echo .*
しかし、最初に私たちが星と遊ぶことができるように遊び場を作りましょう。
mkdir ~/star_test/
cd ~/star_test/
>.file1
>file2
今このディレクトリに私たちはこれを持っています:
cj@zap:~/star_test$ ls -1a
.
..
.file1
file2
echoコマンドを使用して、*が展開される内容に注目してください。
cj@zap:~/star_test$ echo *
file2
cj@zap:~/star_test$ echo .*
. .. .file1
それでは、rmコマンドで何が起こるのか見てみましょう。
cj@zap:~/star_test$ rm -rf *
cj@zap:~/star_test$ ls -1a
.
..
.file1
ご覧のように彼はfile2を削除しただけでした。 rm -rf。*と入力すると、これは次のように書くのと同じになります。
rm -rf . .. .file1
正直に言うと、それは面白そうには見えません。
これがあなたの質問の*部分を明確にすることを願っています。
更新: しかしAnkur Goelが指摘しているように、rmにはある種の保護が組み込まれています(シェルコマンドにとってはちょっと変わったことです:)
新しい遊び場を作りましょう。
cd ~/star_test/
mkdir -p test1/test2/test3
sudo chown root.root test1
cd test1/test2/test3/
>.file1
>file2
それで今再び我々はこれを持っています、しかし保護としてrootによって所有されるtest1で RMは凶暴になり始める。
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2 .file1
cj@zap:~/star_test/test1/test2/test3$ echo .*
. .. .file1
それでは、すべてを削除しましょう。
cj@zap:~/star_test/test1/test2/test3$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2
そして、それはrmが削除しなかったように見えます。そして私達が彼に言ったとしても!
それで、この長い答えの後に、これでdirの中のすべてを削除するのが安全であることがわかります:
rm -rf * .*
しかし、rmのすべての実装がこのように動作するかどうかわからないので、これは慎重に使用します。
はい。 rm -rfは、現在のディレクトリ内のファイルとフォルダのみを削除し、ファイルツリーを上りません。また、rmはシンボリックリンクをたどり、それらが指すファイルを削除しません。そのため、ファイルシステムの他の部分を誤って整理することはありません。
フォルダ全体を空にする、はるかに簡単な方法で説明した「引数が多すぎる」という問題も回避 この答え ディレクトリ自体を削除して再作成するだけです。シンボリックリンクディレクトリにいるときにこれが正しく機能することを確認するために、次の行を使用します。
cd ..
rm -rf $(readlink -f yourdir) #remove the directory, treat the case of a symlink
# by using readlink, to recreate the linked-to directory
mkdir $(readlink -f yourdir) # recreate the directory to have it empty
cd yourdir
(あなたが使用する場合 yourdir
の代わりに $(readlink -f yourdir)
元の場所がいっぱいの間にリンクを置き換えるだけです)
xargs
...
rm -rf ./*
そして明示的に現在のディレクトリを指定します...しかし、Ankurはそれがとにかく問題ないと言っているようです。