我试图find
与SSH结合使用,-exec
并chmod
通过SSH递归更改文件夹中每个文件和目录的权限。
我想在一行中执行以下两个命令:
find /share/Multimedia/ -type f -exec chmod 644 {} \;
find /share/Multimedia/ -type d -exec chmod 755 {} \;
我能够找到一个解决方案,然后再将其他人张贴在某个地方,并且由于某种原因,我的bash命令历史记录已清除,并且没有写下我在其他地方用作参考的语法。我不经常这样做,因此我对标准Unix命令不太了解。
我正在使用一些类似的东西:
# probably won't execute
find /share/Multimedia/ ( if -type f -exec chmod 644 {} \; else if -type d -exec chmod 755 {} \; )
我只想偶尔在我的NAS上运行此程序,然后一口气标准化权限,而在我的NAS处理它的同时,可能无人照管其他事情。
您可以利用find
的表达式系统的and-or结构来执行此操作:
find /share/Multimedia/ -type f -exec chmod 644 {} \; -o -type d -exec chmod 755 {} \;
本质上,这具有以下逻辑:
IF:
the item is a plain file
AND the chmod 644 command succeeds on it
OR
the item is a directory
AND the chmod 755 command succeeds on it
THEN
... well, do nothing; normally it'd print the item's path, but since
there's a -exec in the expression, that gets skipped
但是实际上有一种更简单的方法:
chmod -R u=rwX,go=rX /share/Multimedia/
这利用了chmod
“ X”权限,这意味着“执行,但仅在有意义的情况下”。通常,这意味着它将设置在目录上执行,而不在普通文件上执行。潜在的主要问题是,如果看到对纯文件的执行权限,则认为它是有意的并保留了它,因此在有人检查并为所有内容分配执行权限后,这种情况就不会清除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句