Perl更改目录路径的所有权

时间:2013-12-20 01:10:27

标签: linux perl chown

我正在尝试更改目录列表的所有权,以便

chown -LR deep:deep deep/list/of/50/subdirectories
chown -LR deep:deep deeps/list/of/50/subdirectories

但是我收到超过10个子目录的错误。我想过编写一个perl脚本,使它与深层和深层相同。我在perl中学习了File :: path模块。但是只有make和rmtree函数。有人可以帮忙解决这个问题。感谢。

2 个答案:

答案 0 :(得分:1)

听起来你正在遇到Unix对路径名长度有限制的事实。如果您尝试访问深度嵌套的目录,则路径名将太长。

你可以通过一次几个级别进入每个目录来解决这个问题:

( cd deep/list/of; cd some/more/levels; cd and/a/few/more; ...
  chown -LR deep:deep subdirectories )
( cd deeps/list/of; cd some/more/levels; cd and/a/few/more; ...
  chown -LR deep:deep subdirectories )

括号是这样的,所有cd命令都发生在子shell中;当它完成后,你将从相同的顶级目录开始返回原始shell,这样你就可以从那里处理下一个子目录。

路径名大小的默认限制是<limits.h>

#define PATH_MAX        4096    /* # chars in a path name including nul */

虽然单个文件系统可能会覆盖它。

答案 1 :(得分:0)

如果你想在Perl中这样做,你必须自己走一些目录,例如File::Find。您可以指定代码是否更改为新目录(因此相对路径更短)。