如何删除可能包含小写/大写的文件

如何删除可能包含小写/大写的文件

如何删除可能存在的文件小写大写案件

例如,file_name 可以是:

  • STOCK.Repo 或
  • 股票.REPO 或
  • Stock.repo 或
  • 股票回购协议
  • ... ETC

我会跑:

 rm -f $file_name

目标是删除远程计算机上可能为小写/大写的 stock.repo 文件

答案1

对于 Bash 特定的解决方案:

$ shopt -s nocaseglob

然后运行rm命令。

请注意,要取消设置此选项,请使用shopt -u nocaseglob

为了完整起见,我会指出一个替代但不太优雅的解决方案:

$ rm [sS][tT][oO][cC][kK].[rR][eE][pP][oO]

答案2

find您可以使用命令来完成

find /path/to/directory -type f -iname stock\.repo -exec rm -f {} \;

但要非常小心。它从 /path/to/directory 递归工作。您应该考虑使用 maxdepth 选项,并在可能造成永久性损坏的生产系统上运行该命令之前更熟悉该命令。

答案3

使用zshksh93shell,您可以在每个 glob 的基础上进行不区分大小写的匹配:

  • zsh:

    set -o extendedglob # best in ~/.zshrc
    rm -- (#i)$filename
    
  • ksh93:

    rm -- ~(i:"$filename")
    

    但请注意,如果没有匹配的文件,~(i:stock.repo)则会将文字传递给rm.如果该文件存在,它将被删除(zsh上面会因错误而失败,并且rm在这种情况下根本不会调用)。

    N但是,除了标记之外,您还可以设置标记i

    rm -- ~(Ni:"$filename")
    

    然后,在不匹配的情况下,rm将被调用,但参数为空(可能是由引号引起的错误,因为它意味着传递那么根本就没有争论)。然后你会得到一种rm: cannot remove '': No such file or directory错误,但至少它不会删除错误的文件。

答案4

我已经使用下面的方法完成了。上面提供的答案非常好。下面是我的尝试

ls -ltr | awk '{print $9}' | sed -n '/^STOCK.Repo$/Ip'  |awk '{print "rm" " " $1}'| sh

相关内容