所以在我的一个目录中我跑了
chmod -R ugo+rx
它将该目录(以及其中的所有目录)中的每个文件都转换为具有可执行权限的文件。
现在,我可以尝试使用
chmod -$ ugo-x <a ton of non-executable file extensions>
或通过删除所有非可执行文件的可执行权限(不能选择备份)
关于解决此问题的最佳方法有什么建议吗?该目录(外置硬盘)包含大量数据和程序,但对机器的功能都不是至关重要的。
所以在我的一个目录中我跑了
chmod -R ugo+rx
它将该目录(以及其中的所有目录)中的每个文件都转换为具有可执行权限的文件。
现在,我可以尝试使用
chmod -$ ugo-x <a ton of non-executable file extensions>
或通过删除所有非可执行文件的可执行权限(不能选择备份)
关于解决此问题的最佳方法有什么建议吗?该目录(外置硬盘)包含大量数据和程序,但对机器的功能都不是至关重要的。
正如 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
大多数文件应该是不可执行的,所以从一个开始
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 {} \;