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"}'
4

2 回答 2

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

上面还应用了两个单词之间的制表符空格。

于 2013-08-16T20:08:52.443 回答
0

使用带格式的 while 循环:

find . -type d -printf '%f\t%p\n' | while IFS=$'\t' read A B; do chgrp "$A" "$B"; done
于 2013-08-16T19:55:32.623 回答