首页 > 解决方案 > 通过通配符排除文件扩展名

问题描述

我有一个目录,其中的文件具有多个扩展名,例如 *.asc、.txt。.csv 等。我在脚本中使用此路径,我只能更改通过变量传递的文件名。

/home/myuser/mydirectory/{fileNameVariable}

我可以通过将 *.csv 作为变量值或 *.txt 传递给各个文件来选择所有 .csv。但是我想要做的是选择除 *.asc 之外的所有文件(.csv、.txt 等)。

有没有办法通过使用通配符我只能排除一个文件扩展名并选择其余的?

标签: linuxwildcard

解决方案


您可以使用大括号扩展来仅选择您想要的名称和扩展名,并排除任何未命名的扩展名。例如,要查找目录中的所有文件,您可以使用.csv.txt

$ ls -al *.{csv,txt}    ## note: no space after the separating comma

如果您有很多test1..., test2..., etc.文件并且只想选择test2*.csvtest2*.txt文件,则可以将初始 glob 缩小到:

$ ls -al test2*.{csv,txt}

当然,您可以使用您的路径和变量名来代替test2上面的。


推荐阅读