ディレクトリの内容を削除する最も簡単な方法は何ですか?

ディレクトリの内容を削除する最も簡単な方法は何ですか?

よく使う

ls -ld .
# remember current user and group
chown -R user.group .
chown remembered_user.remembered_group .

ディレクトリ自体の代わりにディレクトリ内のすべてのファイルとディレクトリを再帰的に削除する簡単な方法はありますか?隠しファイルを含める必要があり、ファイル数に関係なく機能する必要があります。

答え1

を使用すると、一度にできるだけ多くのパラメータを渡しながら、findパラメータリストが長すぎるのを防ぐことができます(代わりに使用してください)。不要な一部のパラメータを削除できます(ディレクトリを削除せずにディレクトリでのみ使用されます)。chown+;-prunechownchown -R

find . \! -iname . -prune -exec chown -R user:group {} +

答え2

なぜchownディレクトリで再帰的に実行しないのですか?

$ chown -R user.group *

はい

.古いディレクトリ。

$ ll
total 20
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir1
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir2
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir3
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir4
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir5

dirの内容のみが変更されます。

$ chown -R saml.wheel *

次は何ですか?

$ ll
total 20
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir1
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir2
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir3
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir4
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir5

その間、ディレクトリは.そのまま残ります。

$ ls -ld .
drwxrwxr-x. 7 saml saml 4096 Apr  9 22:29 .

shopt -s dotglob隠しファイルがある場合は、bash、FIGNORE='@(.|..)'ksh93、およびsetopt dot_globzshのglobにそのファイルを含めるようにシェルが設定されていることを確認してください。

または、一致するパターンを追加します(zsh以外のシェルでは.*一致する予定です...

chown -R saml.wheel * .[!.]* ..?*

またはzshで単に

chown -R saml.wheel *(D)

答え3

zshから:

chown user:group **/*(D)

これグローバル予選 Dドットファイルが一致することを意味します。

chownシェルの代わりに再帰巡回を使用できます。

chown -R user:group *(D)

ファイルが多すぎてコマンドラインが長すぎるのが心配な場合は、次のものをロードしてください。chown組み込み~からzsh/ファイルモジュール

zmodload zsh/files
chown user:group **/*(D)

chown組み込み関数を参照したくない場合は、名前をロードするだけですzf_*

zmodload -Fm zsh/files b:zf_\*
zf_chown user:group **/*(D)

コマンドライン制約に合わない可能性がある長いファイルのリストから外部コマンドを呼び出す必要がある場合(ここではそうではありません)、次のものを使用できます。zargs機能:

autoload -U zargs
zargs -- **/*(D) -- chown user:group --

答え4

最初のディレクトリに多くのファイルがあると、Chris Downの答えはまだ失敗する可能性があります。

find . \! -iname . -exec chown user:group {} \;

Chris Downの答えはおそらくほとんどの場合失敗しません。

また、私の状況に適している少し異なるコマンドがあります。私はスクリプト内のディレクトリを変更するのが好きではないので、次のコマンドを作成しました。

find /foo/bar/baz \! -samefile /foo/bar/baz -exec chown user:group {} \;

関連情報