考虑一个包含以下文件的目录:
file1
file1.suffix
file2
file3
file3.suffix
我需要列出所有文件,以便不存在另一个具有相同名称和已知后缀的文件。在上面的示例中,它只匹配file2
.
这就是我想出的:
diff --new-line-format= --unchanged-line-format= \
<(ls -I '*.suffix' | sort) \
<(ls *.suffix | sed 's/\(.*\)\.suffix/\1/' | sort)
有没有更简单更短的方法?
编辑 1
在我的具体情况下,实际上有多个后缀(绑定区域文件/w dnssec):
example.org
example.org.jbk
example.org.jnl
example.org.signed
example.org.signed.jnl
example.com
我正在尝试列出未启用 dnssec 的区域,即没有另一个文件.signed
扩展名的文件。
这是我的尝试:
diff --new-line-format= --unchanged-line-format= \
<(ls -I '*.jbk' -I '*.jnl' -I '*.signed' -I '*.signed.jnl' | sort) \
<(ls *.signed | sed 's/\(.*\)\.signed/\1/' | sort)
与
zsh
:(或者
^*.*
,^*.suffix
如果您只想考虑无扩展名的文件,或者在更新您的问题后使用*.(org|net|com)
,或者^*.*.*
使用^*.(signed|jnl|jbk)
...)即列出不存在的非
.suffix
文件,使用glob 限定符根据某些代码的评估来选择文件(其中包含要选择的文件的路径)。file.suffix
e
e
$REPLY
使用数组减法运算符的另一种方法(助记符: bar的
${a:|b}
元素):a
b
ls -ld --
此处仅用作示例命令,您可以使用任何其他命令或将列表存储在数组中,例如:由于您当前的文件列表具有简单的命名约定 - 这是简短的
ls
++方法cut
:uniq
不知道是否更短,而是在 shell 中直截了当(Bash 和 zsh 快速测试过):
(或
echo
用合理的东西代替)或与多个后缀相同: