私はpdfs
と呼ばれるディレクトリを持っていますが、その中にはサブおよびサブディレクトリの束が含まれています。そのサブフォルダ内のすべてのPDFファイルの所有権を変更したい。これを試してみました
chown -R someuser:somegroup *.pdf
…でも、サブディレクトリ内のPDFの所有権は変わりませんでした。ユーザーとグループは存在しています
chown
のマニュアルページによると、-R
は再帰的な意味を持つはずです
-R, --recursive
operate on files and directories recursively
何が足りないの?
336 Nathan Long 2011-03-22
再帰モードはファイルではなくディレクトリに対してのみ動作します。glob ‘*.pdf’ を使うことで、シェルはファイルリストを chown に渡しています
シェルでは、グロブはコマンドではなくシェルによって評価されることを覚えておいてください。グロブがファイルにマッチする場合、ファイルはコマンドに渡され、コマンドはグロブの存在を知りません (これは、Windows コマンド・プロンプトが行っていた方法とは異なります)。(これは、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フラグを無視して、あなたが要求したことを実行します
このディレクトリとサブディレクトリのパターンとして ‘*.pdf’ を使うには、find
を使うことができます
find . -type f -name '*.pdf' | xargs chown someuser:somegroup
これは現在のディレクトリ ‘.’ から始まり、名前のパターン '*.pdf'
のファイル (filetype f) を探して xargs に渡し、chmod するコマンドラインを構築します。シェルは可能であればグロブを作成しますが、パターンを find
に渡したいので、引用符で囲む必要があることを覚えておいてください
ファイル名にスペースが入っている場合があるので、スペース付きのファイル名を安全にするためのトリックを使いたいところです
find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup
bash 3 以下では、このようにする必要があります。より強力なグロブ処理は bash 4 (shopt -s globstar
を使って) や他のシェルで利用できます。再帰的グロブ **
を使った zsh でも同様です
chown -R someuser:somegroup ./**/*.pdf
349 Rich Homolka 2011-03-22
chown -R someuser:somegroup /your/folder/here/*
これは、指定したフォルダのすべてのファイルとすべてのサブディレクトリ、サブディレクトリに chown を適用します。注意して使用してください
70 Sprachprofi 2015-11-09
find
ユーティリティを使用することができます
find . -name '*.pdf' -exec chown someuser:somegroup {} +
*.pdf
の周りの引用符を忘れないでください。そうしないと、シェルが展開しようとします。これは、すでにシェルが *.pdf
をカレントディレクトリにあるすべての PDF ファイルの名前に置き換えていることを意味します。しかし、これはあなたが望むものではありません。サブディレクトリにあるPDFファイルを探したいのです。ところで…。これは chown
コマンドの問題でもあります
15 bmk 2011-03-22
The command
chown -R someuser:somegroup *.pdf
は、ディレクトリ名が.pdfで終わる場合にのみ、ディレクトリを再検索します。のようなものが必要です
find . -name "*.pdf" -exec chown someuser:somegroup {} \;
6 Mike Scott 2011-03-22
ディレクトリの所有者を再帰的に変更するには、単に使用します
sudo chown -R <username>:<groupname> <dir name>
ここでは username = ディレクトリのオーナーとなる新しいユーザを指定します
groupname = ディレクトリのオーナーとなる新しいグループ
すべてのファイル/ディレクトリには、ユーザの所有者とグループの所有者がいます
1 KawaiKx 2016-05-11
代わりにtree
を使っています
sudo tree -fai ~/.blabla | xargs -L1 -I{} sudo chown youruser:youruser {}
また、’/’ ディレクトリや他のシステムディレクトリで再帰的な chown や chmod を実行しないように注意してください
0 Eduard Florinescu 2018-01-25
ディレクトリ内のすべてのファイルの所有者になるには、使用します
find directory -type f -name '*' | sudo xargs -d '\n' chown $USER
instead of
sudo chown $USER directory\*
or
sudo chown --recursive $USER directory
で生成される引数が多すぎる(ディレクトリ内のファイルが多すぎる)場合や、それぞれの目的を達成できない場合に動作しない可能性があります
0 masterxilo 2019-01-29