鱼壳 - 删除文件并执行命令

时间:2017-08-24 18:21:09

标签: shell fish

我想执行简单的命令

rm -f *.zip or true ; and date

含义我想删除当前路径中的所有zip文件并显示当前日期。无论如何,我想看看日期。即使没有这样的文件。

我会在bash中这样做:

rm -f *.zip || true; date

这就是我的鱼:

enter image description here

更新

阅读文档我发现

enter image description here

事实证明(我无法相信)

我应该将简单的rm -f *.zip写为

set files *.zip
   if count $files > /dev/null
     rm -f *.zip
end

我对这样的解决方案非常不满意,

必须有更好的东西

更新  我试过了

rm -f "*.zip"; date  

但它没有删除文件,因为没有发生扩展

更新

我虽然将表达隐藏在函数中

                    function rmf
                    set files $argv
                    set quantity (count $files)
                        if [ $quantity -gt 0 ]
                            echo "yes";
                            rm -f $files
                        else
                          echo "not enough"
                    end  
                end

但问题是rmf函数不被视为计数函数

3 个答案:

答案 0 :(得分:3)

这是一个令人沮丧的案例,我同意。 fish的通配符扩展行为几乎总是更好(在bash中尝试touch *.zip以查明原因)rm非常重要且烦人的例外。

可能最简单的解决方法是:

set tmp *.zip ; rm -f $tmp ; date

答案 1 :(得分:1)

set files *.zip
set -q files[1]
and rm -f $files
date

答案 2 :(得分:0)

最终命令:

rm -f *.zip ; date   

它在鱼2.6中工作正常,当我遇到问题时我使用了鱼2.2。 他们在以后的版本中改变了行为。

还有一些警告:

在日期之前不需要, 它表现得像&&在bash中它忽略了

是的,它会产生错误,但它确实应该

请参阅此问题https://github.com/fish-shell/fish-shell/issues/683

确切解释原因:

enter image description here