ユーザー権限なしですべてのファイルを削除する

ユーザー権限なしですべてのファイルを削除する

所有者(u)が1つのコマンドで削除できないrディレクトリ内のすべてのファイルを削除するように求められますwx

私は次のコマンドを試しました。

find data -type f ! -perm -u=rwx -exec rm -f {} \;

...しかし、あまりにも多くのファイルが削除されていると思います。

答え1

考えるGNUを排他的に使用すると仮定すると、次のことが必要ですfind

find -type f \! -perm /u=rwx -exec echo rm -f {} \;

テストのために1つを追加しましたecho

印刷された文書が期待に応える場合は、その文書を削除してください。 :)

答え2

Linuxシステムを使用している場合は、GNUがある可能性が高く、find他の答えの例に従ってくださいfind data -type f ! -perm /u=rwx -delete

findLinuxシステムを使用していない場合は、述語パラメータの非標準構文を理解していないBSDシステム(macOSまたはオープンソースBSDのいずれか)を使用している可能性があります。この場合、各ファイルでを使用して、シンボル化されたユーザー権限を選択して文字列に対してテストできます(つまり、ユーザーにファイルに対する権限がないことを意味します)。/u-permstat---

find data -type f -exec sh -c '[ "$(stat -f %SHp "$1")" = --- ]' sh {} \; -print

これはstatLinuxではなくBSDを想定していますstat。このオプションは、出力を-f %SHpそのファイルのstat「高」(Hユーザービット)表記法(S)許可ビット()にフォーマットします。p一般的なLinuxに対応する方法statは、シェルパターンを使用して-c %fから?0??シェルパターンと一致させることです。

実際にファイルを削除-printするように変更できます。-delete

各ファイルに対して新しいシェルを起動しない少し効率的なバリエーション:

find data -type f -exec sh -c '
    for pathname do
        [ "$(stat -f %SHp "$pathname")" = --- ] && echo rm "$pathname"
    done' sh {} +

削除はechoファイルを削除します。

答え3

免責事項:私はこの本の現在の著者です。生皮右回転)(望むよりhttps://github.com/raforg/rawhide)

そして生皮右回転)あなたはできます:

rh -UUU data 'f && !ur && !uw && !ux'

-UUU一致を切断/削除/削除します。

data検索パスです。

残りは検索基準だけです。

fつまり、一般ファイルという意味です。

!ur所有者が読み取る許可ビットが設定されていないことを示します。

!uw所有者書き込み可能権限ビットが設定されていないことを示します。

!ux所有者実行権限ビットが設定されていないことを意味します。

最後の3つの作業はより簡潔に行うことができますnone(0700)

rh -UUU data 'f && none(0700)'

もちろん、ユーザーが一致するファイルを含むディレクトリに対する書き込み権限を持っている場合にのみ、一致する項目を削除できます。これが問題の場合は、sudoを統合する必要があるかもしれません。

    rh -x 'sudo rm %s' data 'f && !ur && !uw && !ux'

-x ...一致するたびに指定されたシェルコマンドを実行します。

%s一致するファイルパス(findなど{})に置き換えられます。

しかし、アクセス制御リストがある場合、この方法は機能しません。

ACLが存在し、確認されているすべてのファイルの所有者が現在のユーザーである場合は、access(2)システムコールを使用してアクセス権を適切に確認できます。

GNU find実際のアクセス確認を実行する、、があり、-readableそのための、、があります。-writable-executablerhiriwix

rh -UUU data 'f && !ir && !iw && !ix'

ただし、これは現在のユーザーがすべての関連ファイルの所有者である場合にのみ機能します。ファイルにACLと他の所有者がいる可能性がある場合、このaccess(2)アプローチは役に立ちません。だから、このようなことがあなたに起こらないことを願っています。

答え4

そしてzsh

rm -- data/**/*(D.^rwx)

関連情報