2011-03-22 16:29:12 +0000 2011-03-22 16:29:12 +0000
308
308

どのようにしたら chown を再帰的に動作させることができますか?

私は pdfs という名前のディレクトリを持っていますが、その中にはサブとサブのディレクトリの束があります。私は、すべてのサブフォルダ内のすべてのPDFファイルの所有権を変更したいと思います。私はちょうどこれを試みた:

chown -R someuser:somegroup *.pdf

…しかし、それはサブディレクトリのPDFの所有権を変えなかった。ユーザーとグループは存在します。

chownのためのマニュアルページによると、-Rは再帰的な意味であるべきです:

-R, --recursive
          operate on files and directories recursively

私は何が欠けているのですか?

回答 (7)

315
315
315
2011-03-22 16:47:32 +0000

再帰モードはファイルではなくディレクトリでのみ動作します。glob ‘*.pdf’ を使用することで、シェルはファイルリストを chown に渡しています。グロブがファイルにマッチする場合、ファイルはコマンドに渡され、コマンドはグロブの存在を知りません (これは、Windows コマンドの方法とは異なります。(これは、Windows のコマンドプロンプトが行っていた方法とは異なります)。のような内容のディレクトリを持っている場合:

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 が動作するためのディレクトリがありません。それはあなたが尋ねたことをします - コマンドライン上の2つのファイルの所有権を変更し、その風変わりな-Rフラグを無視します。 pdf’ をこのディレクトリとサブディレクトリのためのパターンとして使うには、find を使うことができます。これは、ファイル名パターン (あるいは他の多くの基準) にマッチするファイルを見つけ、サブコマンド

find . -type f -name '*.pdf' | xargs chown someuser:somegroup

これは、名前パターン '*.pdf' のファイル (filetype f) を探すために、カレントディレクトリ ‘.’ から始まり、その後 chmod するコマンドラインを構築する xargs に渡します。シェルは可能であればグロブを作成しますが、あなたは '*.pdf' に渡されるパターンが欲しいので、それを引用符で囲む必要があることを覚えておいてください。より強力なグロブ処理は、bash 4 (find を使って) や他のシェルで利用可能です。再帰グロブ shopt -s globstar を使用した zsh の場合も同様です。

57
57
57
2015-11-09 11:44:58 +0000
chown -R someuser:somegroup /your/folder/here/*

指定したフォルダのすべてのファイルとすべてのサブディレクトリ、サブサブディレクトリに chown を適用します。注意して使用してください。

14
14
14
2011-03-22 16:37:41 +0000

findユーティリティを使用することができます:

find . -name '*.pdf' -exec chown someuser:somegroup {} +

*.pdfの周りの引用符を忘れないようにしてください。さもなければ、シェルはそれを展開しようとします。これは、すでにシェルが現在のディレクトリで見つかったすべてのPDFファイルの名前で*.pdfを置き換えることを意味します。しかし、それはあなたが望んでいることではありません。サブディレクトリにあるPDFファイルを見つけたいのです。ところで…。これもまた、chownコマンドの問題です。

6
6
6
2011-03-22 16:38:07 +0000

コマンド

chown -R someuser:somegroup *.pdf

は、directory 名が .pdf で終わっている場合にのみディレクトリを再帰します。次のようなものが必要です:

find . -name "*.pdf" -exec chown someuser:somegroup {} \;
1
1
1
2016-05-11 01:38:58 +0000

ディレクトリの所有者を再帰的に変更するには次のようにします:

sudo chown -R <username>:<groupname> <dir name>

ここで username = ディレクトリの所有者となる新しいユーザー

groupname = ディレクトリの所有者となる新しいグループ

すべてのファイル/ディレクトリにはユーザーの所有者とグループの所有者がいます。

0
0
0
2018-01-25 13:36:51 +0000

私は代わりに tree を使用します:

sudo tree -fai ~/.blabla | xargs -L1 -I{} sudo chown youruser:youruser {}

また、再帰的な chown や chmod を ‘/’ ディレクトリや他のシステムディレクトリで実行しないように注意してください。

0
0
0
2019-01-29 20:22:33 +0000

ディレクトリ内のすべてのファイルの所有者になるためには、

find directory -type f -name '*' | sudo xargs -d '\n' chown $USER

の代わりに

sudo chown $USER directory\*

または

sudo chown --recursive $USER directory

&001

を使用して下さい、 * (ディレクトリの余りにも多くのファイル) によって作り出される余りにも多くの引数があるか、またはあなたがそれぞれほしいと思うものをしないかどれが働かないかもしれません。

関連する質問

10
8
37
7
1