如何避免在删除受保护的文件时需要多次发出“y”

如何避免在删除受保护的文件时需要多次发出“y”

我正在寻找一种解决方案来响应“rm:删除写保护的常规文件 [x]?”

我正在考虑在 bashrc 中多次发出一个字符,然后多次回车。我们该怎么做呢?

答案1

根据更新的问题进行编辑:

为了避免被询问是否删除文件,请添加-f(“force”)选项:

rm -f /path/to/file

您应该注意这有一个副作用:如果任何给定路径不存在,它将不是报告这个,它将成功返回:

$ rm -f /nonexistent/path
$ echo $?
0

原答案:

这是一个简单的解决方案:

yes "$string" | head -n $number | tr $'\n' $'\r'

yes无限重复您给出的任何字符串,并以换行符分隔。多次head后停止$number,并将tr换行符转换为回车符。由于回车,您可能看不到任何输出,但将其传递给此命令(在 中bash)应该可以说明这一点:

printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"

没有的用户bash可以将结果通过管道传输到odhexdumpxxd查看返回的实际字符。

答案2

rm被硬编码来询问交互地关于写保护的文件。 “交互式”意味着它将打印一个问题,然后等待用户输入。

有两种方法可以防止rm询问:

rm -rf somedir
     ^

rm -r --interactive=never somedir
      ^^^^^^^^^^^^^^^^^^^

-r(当删除文件而不是目录时,两者也可以工作)

解释:

-f使rm“忽略不存在的文件和参数,从不提示”。

--interactive=never言出必行:永远不要互动。换句话说:从不提示。

-f和之间的区别--interactive=never是这部分:“忽略不存在的文件和参数”。

比较:

$ rm -rf nonexistingname
$ echo $?
0

$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1

rm当您编写不想交互但仍想处理错误的脚本时,差异主要很有趣。

摘要:在命令行上使用rm -rf.在脚本中使用rm -r --interactive=never.


奖励:如果编写脚本和要删除的文件名来自外部,您应该使用卫生措施来防止时髦的文件名和恶意输入。

rm -r --interactive=never -- "./$filename"

重要部分:双破折号 ( --) 标记选项结尾,以防止以破折号开头的文件名;引号以防止文件名中出现空格;和前导点斜杠 ( ./) 可双重防止以破折号开头的文件名,并强制所有文件与工作目录相关。

请参阅此处了解更多信息:https://www.cyberciti.biz/faq/unix-linux-remove-strange-names-files/


有关所陈述问题的答案(“如何避免在删除受保护文件时多次发出“y””),请参阅https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line/338860#338860

答案3

我不时遇到的另一个问题是rm别名为rm -i,在 /etc/bashrc 中类似这样:

alias rm='rm -i'

在这种情况下,您可以unalias rm或者使用我几年前发现的这个技巧,在已使用别名的命令前面放置一个反斜杠,以忽略一次别名,例如:

\rm somefile

您可以通过以下文章了解有关别名的更多信息尼克斯克拉夫特

答案4

我也遇到了同样的问题。上面的答案仅适用于一个文件,但如果您想忽略很多是的。

您可以使用

sudo rm -r /path/to/directory

删除所有写保护的常规文件

相关内容