回答:
再帰モードは、ファイルではなくディレクトリでのみ機能します。glob '* .pdf'を使用することにより、シェルはファイルリストをchownに渡します。chownはこれらがファイルであることを確認し、表示されるファイルの権限を変更します。
シェルでは、globはコマンドではなくシェルによって評価されることに注意してください。グロブがファイルと一致する場合、それらはコマンドに渡され、コマンドはグロブが存在することを決して知りません。(これは、Windowsコマンドプロンプトを使用した方法とは異なります)。dirがある場合、内容は次のようになります。
machine:$ ls -F
file1.pdf file2.pdf other.txt subdir/
そして、あなたはタイプしました:
chown -R someuser:somegroup *.pdf
シェルは最初にリストを作成します:file1.pdf file2.pdf
そして、コマンドを実行します:
chown -R someuser:somegroup file1.pdf file2.pdf
参照してください、-Rが動作するディレクトリはありません。それはあなたがそれをしたことをします-その風変わりな-Rフラグを無視して、コマンドラインで2つのファイルの所有権を変更します。
このディレクトリとサブディレクトリのパターンとして '* .pdf'を使用するにfind
は、ファイル名パターン(または他の多くのcriterea)に一致するファイルを検索してサブコマンドに渡すことができるを使用できます。
find . -type f -name '*.pdf' | xargs chown someuser:somegroup
これは現在のディレクトリ「。」で始まります。名前パターンのファイル(ファイルタイプf)を探し、'*.pdf'
xargsに渡します。xargsは、chmodのコマンドラインを作成します。patternを囲む引用符に注意して'*.pdf'
ください。可能な場合、シェルはglobを作成しますが、パターンをに渡すfind
必要があるため、引用符で囲む必要があります。
ファイル名にはスペースが含まれている可能性があるため、スペースを含むファイル名を安全にするためのトリックを使用する必要があります。
find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup
bash 3以前では、これが必要な方法です。より強力なグロビングは、bash 4(with shopt -s globstar
)およびその他のシェルで使用できます。再帰的なglobを使用したzshでも同じです**
:
chown -R someuser:somegroup ./**/*.pdf
chown -R someuser:somegroup /your/folder/here/*
これにより、指定したフォルダーのすべてのファイルとすべてのサブディレクトリとサブサブディレクトリにchownが適用されます。注意して使用してください。
sudo chown -R user ./
私のために働いたが、そうでsudo chown -R user ./*
はなかった
.env
です。
find
ユーティリティを使用できます:
find . -name '*.pdf' -exec chown someuser:somegroup {} +
引用符を忘れないでください*.pdf
。そうでない場合、シェルはそれを展開しようとします。これは*.pdf
、現在のディレクトリにあるすべてのPDFファイルの名前ですでにシェルが置き換えられることを意味します。しかし、それはあなたが望むものではありません。サブディレクトリにあるPDFファイルを見つけたい。Btw .:それもあなたのchown
コマンドの問題です。
+
パフォーマンスのために、きちんとしたトリックを調べる必要がありました。-exec command {} +
この-execアクションのバリアントは、選択されたファイルに対して指定されたコマンドを実行しますが、コマンドラインは、選択された各ファイル名を最後に追加することによって構築されます。コマンドの呼び出しの総数は、一致するファイルの数よりもはるかに少なくなります。コマンドラインはxargs
、コマンドラインを作成するのとほぼ同じ方法で作成されます。{}
コマンド内では1つのインスタンスのみが許可されます。コマンドは開始ディレクトリで実行されます。
コマンド
chown -R someuser:somegroup *.pdf
ディレクトリ名が.pdfで終わる場合にのみ、ディレクトリを再帰的に再帰します。次のようなものが必要です。
find . -name "*.pdf" -exec chown someuser:somegroup {} \;
tree
代わりに使用します:
sudo tree -fai ~/.blabla | xargs -L1 -I{} sudo chown youruser:youruser {}
また、 '/'ディレクトリまたは他のシステムディレクトリで再帰的なchownまたはchmodを実行しないように注意してください。
shopt -s globstar
が再帰的なグロビングを行うことを反映するように編集されました。