我如何递归运行 chmod -x?

我如何递归运行 chmod -x?

因此,我的音乐收藏保存在 12.04.2 服务器上。这些年来,这个收藏一直陪伴着我从 Windows 机器转移到 MacBook Pro,最后转移到现在的服务器上。

我注意到,出于某种原因,我的所有“folder.jpg”(封面照片)在终端上都以绿色突出显示(表示它们是可执行的)。如果我运行chmod -x folder.jpg终端,它们将以浅紫色显示(表示某种形式的媒体文件)。现在我并不担心颜色本身,但我有两个问题。a) 为什么我的 .jpg 被赋予可执行位?(我敢肯定,可能是因为 Windows 搞砸了它们),b) 我如何chmod -x *.jpg从音乐层次结构的顶部递归运行?

chmod -R -x *.jpg当我从顶层尝试时,我得到:

mediausr@MediaSRV:/space/music$ chmod -R -x *.jpg
chmod: cannot access `*.jpg': No such file or directory

附加问题:所有文件夹都以“其他可写”颜色显示,而我创建的新文件夹则以“目录”颜色显示。我对此并不十分担心,因为它不涉及可执行文件,但你知道,如果有人能告诉我一种递归方法,让系统将它们视为直接目录,那就太棒了。:0)

感谢您的所有意见。

答案1

没有任何(好的)理由让图片可执行。

只需运行此命令即可修复它们:

find /space/music -name "*.jpg" -exec chmod -x {} +

奖金:

find /space/music -type d -exec chmod o-w {} +

解释:

命令行的大部分内容都是不言自明的。唯一需要一些理解的部分是结尾。{}被替换为与过滤器匹配的文件(或目录)的名称。通常,find 命令以受保护的分号结尾\;

但是,这样做效率不高,因为每个文件/目录都要运行一次命令。

有一个众所周知的解决方法,即通过管道find输出xargs将文件名连接起来,直到达到允许的最大命令行,但是当路径包含空格时就会出现问题,这种情况在 Unix/Linux 世界中也越来越常见。

同样,基于 GNU 特定扩展的解决方法可以正确处理这些情况。我选择了一种更简单的方法,使用 POSIX(读取可移植)方式让 find 自行构建长命令行,即{}由一组文件名替换,最多允许一个文件名。

相关内容