小编S. *_*ish的帖子

如何使用缺少 -exec 的查找递归设置目录权限?

我的 Qnap NAS 被一个find缺少-exec参数的命令诅咒,所以我必须通过管道传输某些东西。外壳是:GNU bash,版本 3.2.57(2)-release-(arm-unknown-linux-gnueabihf)

我试图在当前目录的所有子目录(不是文件)上设置 setgid 位。

这不起作用:

find . -type d | xargs chmod g+s $1
Run Code Online (Sandbox Code Playgroud)

使用"$1""$(1)"$("1")等将不能工作。它们都表示chmod正在传递一个包含空格作为两个或多个参数的目录名称(它会输出有关支持哪些参数的标准帮助消息)。

xargs如果我不需要,我不在乎使用;我认为无论如何它都会被长名字窒息,不是吗?

这些及其变体不起作用:

find . -type d | chmod g+s

find . -type d | chmod g+s "$1"
Run Code Online (Sandbox Code Playgroud)

我想过使用awksed注入引号,但我必须认为有一种更简单的方法来做到这一点。人们以前是做什么的-exec?(可悲的是,我可能早在 1995 年左右就知道,但早已忘记了。)

PS:这些目录名称中的许多将包含 Unicode 字符、?符号等。它们最初来自 macOS,这是相当宽松的。也就是说,我可能应该?用 Unicode 字符之类的东西替换所有实例,?这样 Windows 就不会被它们阻塞。但这也需要find对这个残缺软件版本的find.

bash pipe find quoting qnap

5
推荐指数
1
解决办法
503
查看次数

标签 统计

bash ×1

find ×1

pipe ×1

qnap ×1

quoting ×1