如何在 Ubuntu 终端中查找和修改一种文件类型的权限?

如何在 Ubuntu 终端中查找和修改一种文件类型的权限?

可能重复:
如何对全部目录执行 chmod 755 但不对文件执行 chmod 755 (递归)?

我刚刚从 Ubuntu 8.04 升级到 9.04,添加了一个额外的硬盘,/home并使用 iPod(遗憾的是 FAT32)来保存/传输文件。

复制这些文件时,我发现大多数文件(我想这是由于 FAT32 上的权限未设置或设置不当的问题)现在chmod +x在某个时候已经被有效地修改了。

我想知道是否有一种简单的方法可以找到特定类型的所有文件(例如.txt.css)并将其直接传输到chmod -x?我尝试在这个网站和其他几个网站上使用各种短语进行搜索,但找不到任何东西。不过我猜这可能是词汇问题。

感谢你们所提供的帮助以及你们的时间。

答案1

chmod -R a-x *.txt

就是一个例子,但你必须对所有不同的文件模式重复它。

答案2

命令行还可以使用正则表达式类型的语法,因此您只需执行一次命令。

cd /to/my/directory
chmod -R a-x *.(txt|css|whatever)

好的,我尝试测试它,但它并没有完全发挥作用,我正在寻找正确的语法,但我知道它是可能的。谢谢。

同时..

这绝对有效(并且绝对是小题大做):

find /to/my/directory -type f | egrep "(txt|css)$" | xargs -t -i{} chmod a-x {}

解释:

find命令将列出所有文件、链接和目录,每行一个。路径名指定起点。选项-type f指定仅查找文件。

egrep命令将输出与正则表达式匹配的每一行。"(txt|css)$"正则表达式表示将以 ($) 结尾的每个文件与 txt 或 css 匹配。

xargs命令将获取一个命令的输出并将其导入到另一个命令(其之后的命令)的输入中。例如:

$> echo a\nb\nc 
a
b
c

$> echo a\nb\n\c | xargs echo
a b c

所以通常情况下,你可以这样做, find -type f | xargs echo但是如果你有很多文件,输出有时会变得很长,所以我觉得最好把它分解一下。所以。-i 选项对每一行输出执行命令,每行的值存储在一个变量中,我定义为 {}。-t 命令将生成的每个命令输出到标准输出,这样你就可以看到发生了什么。

答案3

作为您实际问题的答案,find | xargs 解决方案是正确的。

但是,要解决您的根本问题,没有引用就无法正确恢复所有文件权限。如果您有空间,您可以创建一个虚拟机,安装与真实机器相同的所有软件包(要了解如何操作,请搜索 dpkg get set selectings),然后使用 chmod 的 --reference 选项“复制”权限。

如果您决定采用这条路线,我可以编辑我的帖子并提供更详细的说明。

答案4

啊,发现你应该使用 tar 来备份/恢复。:(

find . -type f -name '*.txt' -exec chmod -x {} +

或者使用您想要的任何其他选择器,例如 find -regextype posix-extended . -type f -iregex '.*\.(txt|css|html)' -exec chmod -x {} +

实际上,主目录中几乎任何东西都不应可执行,因此我会从find -type f(不带 -name)开始,然后根据需要使内容可执行。也许 chmod 为模式 664,如果你最终将所有内容设置为模式 777,因为你不希望文件(或目录)具有全局写入权限。因此实际上,chmod ow -R ~ 是一个好主意。

某些文件不应被同一台计算机上的其他用户读取,例如 ~/.bash_history、~/.ssh、~/Mail 等(基于我的主目录中可能确实重要的内容)

    光盘
    chmod 600 .bash_history .esd_auth .githistory .ICEauthority .lesshst .mcoprc .netrc* .pulse-cookie .recently-used* .viminfo .Xauthority .xsession-errors
    chmod 700 .dbus .gconf* .gnome* .gnupg .icedteaplugin .kde .macromedia .metacity 邮件 .mozilla .openoffice.org* .pulse .purple .Skype .ssh .thumbnails .tsclient .update-notifier

    chmod 2700 .gnupg # 我猜是超级偏执狂。
    chmod 500 .gvfs # gvfs 很奇怪,可能在当前的 ubuntu 上不存在?

将其复制/粘贴到终端中。不要担心错误,我敢肯定您没有和我一样的所有点文件和目录。(我省略了很多晦涩难懂的目录,它们实际上只是游戏保存目录,可以公开阅读而不会造成伤害。)通常,如果您不希望您的 pr0n 存储或任何提及它的内容出现在其他用户的定位结果或其他搜索中,请确保您的历史文件等是私密的。

相关内容