我的 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)
我想过使用awk或sed注入引号,但我必须认为有一种更简单的方法来做到这一点。人们以前是做什么的-exec?(可悲的是,我可能早在 1995 年左右就知道,但早已忘记了。)
PS:这些目录名称中的许多将包含 Unicode 字符、?符号等。它们最初来自 macOS,这是相当宽松的。也就是说,我可能应该?用 Unicode 字符之类的东西替换所有实例,?这样 Windows 就不会被它们阻塞。但这也需要find对这个残缺软件版本的find.