递归模式只适用于目录,而不是文件。通过使用 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