所以在我的一个目录中我跑了
chmod -R ugo+rx
将此目录中的每个文件(以及其中的所有目录)转换为具有可执行权限的文件。
现在,我可以尝试使用
恢复此功能 chmod -$ ugo-x <a ton of non-executable file extensions>
或删除所有非可执行文件的可执行权限(备份不是选项)
有关最佳方法的任何建议吗?此目录(外部硬盘驱动器)包含大量数据和程序,但这些都不是机器功能的关键。
答案 0 :(得分: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
答案 1 :(得分: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设置为任何语言的解释脚本,以及elf二进制文件。
一个更加模糊的版本可用于进一步减少误报,收益递减:
find dir -type f -exec bash -c 'sed 1p "$1" | grep -q -e "^.ELF" -e "^#!"' -- {} \; -print -exec chmod a+x {} \;