你好...我想对一大堆文件执行 chmod 777。或者,由于更安全,我也可以对这些文件执行 chown www:www 以使它们可以通过网络访问。
现在,由于我有超过 400,000 个文件,sudo chmod -R 777 ./*
并且sudo chown -R www:www ./*
根本不起作用,只返回“Arg 列表太长”
谷歌搜索后出现了find
和xargs
,但这对我的文件集不太适用,因为有些文件的名称中有下划线。我不确定为什么这会破坏脚本,但确实如此。命令:
find ./ -name "*" | xargs chmod 777
以下是目录树的匿名片段:
files
\- 28934723
\- file1.xml
\- file2.txt
\- 34905834
\- file1.xml
\- file2.txt
\- 21398230
\- file1.xml
\- file2.txt
据我所知man find
,它应该会自动递归到子目录中,但我不确定。当我运行上述命令时,一些文件发生了变化,但大多数目录保持不变(相同的权限)。
提前感谢你们提供的任何帮助:)
答案1
sudo chown -R www:www ./
如果您不想要 www 拥有的目录,只需将其改回来。
答案2
我不明白为什么以下命令行无法工作:
find . -print0 |xargs -0 chmod 777
或者更简单一点,chmod 777 -R .
答案3
如果可以的话,请尝试限制权限。如果您尝试授予对 www 的完全访问权限,并且您使用的是具有 acl 的 redhat 系统(可能需要重新挂载),请尝试:
setfacl -R -m user:www:rwx the_parent_directory
setfacl -d -R -m user:www:rwx the_parent_directory
并在必要时用组替换用户,重复此操作。
如果您的参数列表太长并且不能使用完整目录,那么这将起作用(但会更慢):
find . -type d -exec setfacl -d -R -m user:www:rwx '{}'; setfacl -R -m user:www:rwx '{}' \;
如果其中还有未被目录覆盖的文件,则需要对这些文件再次运行它(我相信有人会告诉我切换到 setfacl 只执行顶级目录):
find . -type f -exec setfacl -m user:www:rwx '{}' \;
您也可以使用相同的方法执行 777(类似于 xargs,但我更喜欢这种方式,看起来更干净:
find . -exec chmod 777 '{}' \;
至于下划线,它应该不是问题(它们可能是由管道或某些东西解释的),但如果它们是:
find . -name \*_\* -exec chmod 777 '{}' \;