如何在 rm 要求确认时自动取消删除?

How to auto cancel deleting while rm asking for confirm?

是否有类似 rm -f 但自动 n 而不是自动 y 的东西? 删除可以删除的 rm not asked 并防止其他人被删除。与带有只读标志的文件一样,由其他程序打开的文件。 我试过 yes n | rm somefile 不工作。

它是 OS X 10.11。 rm 在只读文件上提升。

似乎 rm 在不同的平台上有不同的默认行为。

我在 OS X 10.11 和 Ubuntu 14.04(无效)上试过的答案:

rm somefile
rm --interactive=never somefile 
echo n| rm -i somefile

Ubuntu 日志:

$ touch somefile
$ chmod 444 somefile 
$ ls -l somefile 
-r--r--r-- 1 ubuntu ubuntu 0 Apr 12 06:04 somefile
$ 
$ rm somefile
rm: remove write-protected regular empty file ‘somefile’? n
$ rm somefile
rm: remove write-protected regular empty file ‘somefile’? n
$ 
$ rm --interactive=never somefile 
$ rm --interactive=never somefile 
rm: cannot remove ‘somefile’: No such file or directory
$ 
$ touch somefile                                                
$ chmod 444 somefile                                                 
$ ls -l somefile                                            
-r--r--r-- 1 ubuntu ubuntu 0 Apr 12 06:06 somefile
$ echo n| rm -i somefile 
rm: remove write-protected regular empty file ‘somefile’? $ ls -l somefile 
-r--r--r-- 1 ubuntu ubuntu 0 Apr 12 06:06 somefile

@SaintHax 的解决方案

for file in $@; do
    [ -w $file ] && rm $file
done

适用于上述平台上的只读文件。

您可以使用 --interactive-i 作为 rm 命令中的选项,如手册页所述:

-i prompt before every removal

--interactive[=WHEN] prompt according to WHEN: never, once (-I), or always (-i); without WHEN, prompt always

这对我 Linux 的两种口味来说效果很好。

echo n| rm -i *.csv

但是,-i 总是交互式的,所以它基本上否定了命令。如果您想使用 readonly 命令跳过任何内容,我建议您创建一个函数。

del() {
   for file in $@; do
      [ -w $file ] && rm $file
   done
} 

请注意,这仅在您无法写入文件时有效。

您可以使用:

rm --interactive=never somefile