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的man page,-R应该是递归的意思:

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

我缺什么?

答案 (7)

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

递归模式只适用于目录,而不是文件。通过使用 glob’*.pdf',shell 将文件列表传递给 chown, chown 会看到这些文件,然后改变它看到的文件的权限,就这样。如果 glob 匹配了文件,它们会被传递给命令,而命令永远不会知道有 glob 的存在。这与Windows的Command prompt的做法不同)。如果你有一个dir,内容是这样的:

machine:$ ls -F
file1.pdf file2.pdf other.txt subdir/
chown -R someuser:somegroup *.pdf

,然后你输入:

chown -R someuser:somegroup file1.pdf file2.pdf

,shell会先做一个列表:file1.pdf file2.pdf

,然后运行你的命令:

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

看,没有目录让-R执行。它做的是你要求它做的事情–在命令行中改变两个文件的所有权,忽略了那个奇怪的 -R 标志。 pdf'作为这个目录和子目录的模式,你可以使用find,它可以找到符合文件名模式的文件(或许多其他标准的文件),然后传递给子命令

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

。注意'*.pdf'模式周围的引号,记住,如果shell可以的话,会创建一个glob,但你希望传递给'*.pdf'的模式,所以你需要将其引号。在bash 4(用find)和其他shell中可以使用更强大的globbing。在 zsh 中也是一样,使用递归的 glob shopt -s globstar:

chown -R someuser:somegroup ./**/*.pdf
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周围的引号。否则shell会试图将其展开。这意味着shell会用当前目录中所有PDF文件的名称来替换*.pdf。但这不是你想要的。你想找到位于子目录中的PDF文件。Btw.: 这也是你的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

,如果有太多的参数(目录中的文件太多)或不符合你的要求,可能会失效。