【发布时间】:2021-02-24 13:31:59
【问题描述】:
我正在尝试删除 所有 文件除了 只读文件,但此命令无论如何都会删除所有文件:
yes n | rm *
我做错了吗?如果没有,为什么它不起作用?
【问题讨论】:
我正在尝试删除 所有 文件除了 只读文件,但此命令无论如何都会删除所有文件:
yes n | rm *
我做错了吗?如果没有,为什么它不起作用?
【问题讨论】:
问题是您只需要对文件夹而不是文件的写入权限即可删除它们:
任何访问文件数据的尝试都需要读取权限。任何修改文件数据的尝试都需要写入权限。任何执行文件(程序或脚本)的尝试都需要执行权限。
在 *nix 系统中,目录也是文件,因此使用与常规文件相同的权限系统。注意分配给目录的权限不会被该目录中的文件继承。
由于目录的使用方式与常规文件不同,因此权限的工作方式略有不同(但只是略有不同)。尝试列出目录中的文件需要对该目录的读取权限,但不需要对其中的文件具有读取权限。将文件添加到目录、从目录中删除文件或重命名文件的尝试都需要目录的写权限,但(可能令人惊讶的是)不需要其中的文件。执行权限不适用于目录(目录不能也是程序)。但是该权限位被用于其他目的的目录。
要查找具有特定权限的文件,您可以使用
find -perm <mode>
要删除 find 找到的文件,您可以使用
find . -perm 444 -exec /bin/rm {} \;
(可能略有不同,这取决于您搜索的文件和您拥有的系统)
【讨论】:
要让rm 自动启用提示用户删除不可写文件的-i 模式,标准输入必须是终端(如手册页中所述)。
因此,为了使命令正常工作,用户必须手动指定-i 选项:
yes n | rm -i *
执行此操作后,命令按预期工作。
【讨论】:
在 Posix 系统中,文件的只读状态不会阻止 rm 将其删除。
你还没有说你的 shell 是什么,但也许你有一个 rm 的别名,当文件是只读的时它会要求你确认,并且当它 stdin 是它的一部分时,别名的行为会有所不同一根管子。
【讨论】:
unalias 报告“未找到”。我什至尝试使用 /etc/bash.bashrc 和 repl.it 但没有成功。