0

所以在我的一个目录中我跑了

    chmod -R ugo+rx

它将该目录(以及其中的所有目录)中的每个文件都转换为具有可执行权限的文件。

现在,我可以尝试使用

    chmod -$ ugo-x <a ton of non-executable file extensions>

或通过删除所有非可执行文件的可执行权限(不能选择备份)

关于解决此问题的最佳方法有什么建议吗?该目录(外置硬盘)包含大量数据和程序,但对机器的功能都不是至关重要的。

4

2 回答 2

1

正如 l0b0 告诉你的那样,没有备份是不可能恢复它的。

一些帮助可能来自file命令,什么可以检测编译的可执行文件,以及带有 shebang 行的脚本。

对于粗略的想法,您可以尝试:

find /mnt/hdd -type f -print | file -f -

或者

find /mnt/hdd -type f -print | file -i -f -

您将看到检测到哪些文件=类型。如果检测到某些可执行文件,您可以尝试将它们保留原样并从其他可执行文件中删除。其余文件必须手动执行 - 樱桃采摘...

上面file -f -stdin. 此功能已启用FreeBSD- 我还没有 Linux。如果您的file命令没有-f开关,您可以尝试(慢得多)

find . -type f -print0 | xargs -0 file
于 2013-06-21T22:13:18.400 回答
0

大多数文件应该是不可执行的,所以从一个开始

find dir -type f -exec chmod a-x {} \;

然后,您可以搜索应该有 +x 的文件。我什至不会打扰,file因为它区分了许多不同类型的可执行脚本,我们想要所有这些:

find dir -type f -exec grep -q -e '^.ELF' -e '^#!' \; -print -exec chmod a+x {} \;

这会将 +x 设置为任何语言的解释脚本以及精灵二进制文件。

更模糊的版本可用于进一步减少误报,收益递减:

find dir -type f -exec bash -c 'sed 1p "$1" | grep -q -e "^.ELF" -e "^#!"' -- {} \; -print -exec chmod a+x {} \;
于 2013-06-21T23:09:49.227 回答