2013-08-16 41 views
1

我有一堆文件夹我想查找并将组更改为目录名称。将目录组设置为目录名称

/SchoolA/ 
/SchoolB/ 
...... 
/SchoolZZZ/ 

我想不出它 - 但想是这样的:

find . -type d -exec chgrp {} {} \; 

我得到的非法团体的名字,因为它包括./该组。总之,以消除./

需要被类似

find . -type d -exec chgrp NODOTSLASH({}) {} \; 

* 编辑 *

我与以下职位的帮助下接近 - 但它仍然打印“ “。目录。我该如何摆脱?

find . \(! -path '^.*' \) -type d -maxdepth 1 | sed -e 's/\.\///g' | awk '{print "\x22"$0"\x22","\x22"$0"\x22"}' 

回答

1
find . -type d | sed -e 's/\.\///g' | awk '{print $1, $1}' | xargs chgrp 

的更自组织的方法,以避免点.

find . -type d | sed -e 's/\.\///g' -e 's/\./avoid/g' | grep -v avoid | awk '{print $1"\t"$1}' | xargs chgrp 

上述内容也适用这两个词之间标签空间。

+0

这非常接近 - 但是,空间(我没有指定会在那里)无法正常工作。但是 - 我修改了一些以尝试获得正确的结果 - 但仍不完全正确。感谢您的帮助到目前为止!查看原始帖子,了解我如何修改。再次感谢! – user1453561

+0

添加更多信息给我的答案...这应该解决'点'问题。我已经在我的Mac上测试过它,它似乎正在工作... – iamauser

+0

很好 - 固定了。问题。我还使用了$ 0而不是$ 1,并将它用引号括起来作为我已经有空格的组/文件夹名称。谢谢你的帮助! – user1453561

0

使用while循环带格式:

find . -type d -printf '%f\t%p\n' | while IFS=$'\t' read A B; do chgrp "$A" "$B"; done 
+0

我似乎无法得到这个在我的Mac上工作 - 说-printf:未知的主要或运营商。 – user1453561