【问题标题】:Set group of directory to name of directory将目录组设置为目录名
【发布时间】:2013-08-16 19:33:35
【问题描述】:

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

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

【问题讨论】:

    标签: bash terminal find chgrp


    【解决方案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
    

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

    【讨论】:

    • 这非常接近 - 但是,空格(我没有指定会在其中)无法正常工作。但是-我确实修改了一些以尝试获得正确的结果-但仍然不太正确。感谢您到目前为止的帮助!有关我如何修改的信息,请参见原始帖子。再次感谢!
    • 在我的回答中添加了更多信息...这应该可以解决 dot 问题。我已经在我的 Mac 上测试过了,它似乎可以工作......
    • 太棒了 - 修复了 .问题。我还使用 $0 而不是 $1 并用引号括起来,因为我确实有空格的组/文件夹名称。感谢您的帮助!
    【解决方案2】:

    使用带格式的while循环:

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

    【讨论】:

    • 我似乎无法让它在我的 Mac 上工作 - 说 -printf: unknown primary or operator。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2022-10-30
    • 2021-10-23
    相关资源
    最近更新 更多