我在 Unix 文件夹中有 10 个扩展名为 .txt 的文件,这里我需要获取除 fgh.txt (任何一个)文件之外的所有文件,UNIX 命令是什么?

我在 Unix 文件夹中有 10 个扩展名为 .txt 的文件,这里我需要获取除 fgh.txt (任何一个)文件之外的所有文件,UNIX 命令是什么?

我在 Unix 文件夹中有 10 个扩展名为 .txt 的文件。在这里,我需要获取除 fgh.txt (任何一个)文件之外的所有文件。什么是 UNIX 命令?

1.abc.txt
2.bcd.txt
3.cde.txt
4.def.txt
5.efg.txt
6.fgh.txt
7.ghi.txt
8.hij.txt
9.ijk.txt
10.jkl.txt

这里我需要获取除 file 之外的所有文件6.fgh.txt。什么是 UNIX 命令?

答案1

寻找命令:

find . -type f -name "*.txt" ! -name "fgh.txt"
  • -name "*.txt"- 查找名称与模式对应的文件(所有txt文件)

  • ! -name "fgh.txt"- 除了确切的文件名fgh.txt


如果您的文件确实以数字为前缀(我不确定该问题的编辑),请将否定条件更改为! -name "*fgh.txt"

答案2

外部全局变量bash 的选项可以解决这个问题:

bash 手册页中描述的扩展通配符:

?(pattern-list) 匹配零次或一次出现的给定模式
*(pattern-list) 匹配零次或多次出现的给定模式
+(pattern-list) 匹配一次或多次出现的给定模式
@(pattern-list) 匹配给定模式之一
!(pattern-list) 匹配除给定模式之一之外的任何内容

您需要的命令(排除任何*fgh.txt文件):

shopt -s extglob
ls -d -- !(*fgh).txt

如果您想根据完整文件名排除特定文件:

ls -d -- !(6.fgh.txt)

答案3

简单而优雅(假设是 GNU ls):

ls -I fgh.txt

答案4

如果您希望将文件列表放入数组中,则zsh有以下几种选择:

setopt extendedglob # best in ~/.zshrc

# using the negation glob operator:
files=((^*fgh).txt)

# using the "except" glob operator:
files=(*.txt~*fgh*)

# trimming entries from the array afterwards:
files=(*.txt)
files=(${files:#*fgh*})

然后根据需要使用您的数组:

ls -ld -- $files

相关内容