【问题标题】:Answer no to all questions using the yes command使用 yes 命令对所有问题回答否
【发布时间】:2021-02-24 13:31:59
【问题描述】:

我正在尝试删除 所有 文件除了 只读文件,但此命令无论如何都会删除所有文件:

yes n | rm *

我做错了吗?如果没有,为什么它不起作用?

【问题讨论】:

    标签: bash rm


    【解决方案1】:

    问题是您只需要对文件夹而不是文件的写入权限即可删除它们:

    (From here)

    任何访问文件数据的尝试都需要读取权限。任何修改文件数据的尝试都需要写入权限。任何执行文件(程序或脚本)的尝试都需要执行权限。

    在 *nix 系统中,目录也是文件,因此使用与常规文件相同的权限系统。注意分配给目录的权限不会被该目录中的文件继承。

    由于目录的使用方式与常规文件不同,因此权限的工作方式略有不同(但只是略有不同)。尝试列出目录中的文件需要对该目录的读取权限,但不需要对其中的文件具有读取权限。将文件添加到目录、从目录中删除文件或重命名文件的尝试都需要目录的写权限,但(可能令人惊讶的是)不需要其中的文件。执行权限不适用于目录(目录不能也是程序)。但是该权限位被用于其他目的的目录。

    要查找具有特定权限的文件,您可以使用

    find -perm <mode>
    

    read more

    要删除 find 找到的文件,您可以使用

     find . -perm 444 -exec /bin/rm {} \;
    

    (可能略有不同,这取决于您搜索的文件和您拥有的系统)

    more exec examples

    【讨论】:

      【解决方案2】:

      要让rm 自动启用提示用户删除不可写文件的-i 模式,标准输入必须是终端(如手册页中所述)。

      因此,为了使命令正常工作,用户必须手动指定-i 选项:

      yes n | rm -i *
      

      执行此操作后,命令按预期工作。

      【讨论】:

        【解决方案3】:

        在 Posix 系统中,文件的只读状态不会阻止 rm 将其删除。

        你还没有说你的 shell 是什么,但也许你有一个 rm 的别名,当文件是只读的时它会要求你确认,并且当它 stdin 是它的一部分时,别名的行为会有所不同一根管子。

        【讨论】:

        • 我在 Mint Ulyana 上使用 bash 并且没有定义别名,事实上 unalias 报告“未找到”。我什至尝试使用 /etc/bash.bashrc 和 repl.it 但没有成功。
        猜你喜欢
        • 2014-11-24
        • 1970-01-01
        • 2010-10-21
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多