移除如果存在于鱼

时间:2017-11-07 10:26:45

标签: bash fish

我已经开始使用fish并且我了解fish和常规bash之间存在几个主要差异(我使用过mac终端)。

我的一些别名没有用,我能解决。但是,我无法解决以下问题。基本上,我想删除所有与给定扩展名匹配的文件。

alias texclr=rm -v *.aux *.log *.out *.spl *.bbl *.synctex.gz *.blg *.lof *.lot *.tdo *.toc *.idx *.nav *.snm *.a* *.g* *.l* *.ist *.run.xml *-blx.* *.fff *.bcf

但是,它似乎不起作用,并在第一次出现不匹配的文件时产生错误。

我的问题是:

  1. 有没有办法可以删除文件(如果存在)(最好是一个班轮)?
  2. 这在概念上是错误的吗?
  3. 任何指针都会有所帮助。

1 个答案:

答案 0 :(得分:7)

Fish,自版本2.3.0起,将打印错误,并且不执行除forsetcount之外的每个命令的不匹配globs的命令。

这意味着您应该使用

将匹配的文件分配给变量
set -l files *.aux *.log # and so on

因为这需要第二个命令,它应该是一个完整的函数而不是别名(在fish中它只是函数的语法糖):

function texclr
    set -l files *.aux *.log *.out *.spl *.bbl *.synctex.gz *.blg *.lof *.lot *.tdo *.toc *.idx *.nav *.snm *.a* *.g* *.l* *.ist *.run.xml *-blx.* *.fff *.bcf
    rm -v $files
end

如果您不想在没有匹配文件的情况下执行rm(以避免出现难看的错误消息),您可以使用set -q files[1]; and rm -v $files