如果有某种特殊语法,我可以查看cat
目录中除选定文件之外的所有文件。例如,假设我有大约 1200 个文本文件,每个文件包含一些行,大约 3 或 4 行,但有几个文件除外:
readme.md
contrib.rst
licence.txt
更长。我想查看除上面提到的 3 个(如果可能的话,更多)文件之外的所有文件的内容。
我尝试了以下命令:
cat !{readme.md,contrib.rst,licence.txt}*.*
cat
因为我在某处看到过如下用法:
cat [!t][!m][!p]*.sh
我认为,由于{a,b}
在 bash 脚本中表示集合,因此否定它应该可以工作。当然我错了。
答案1
尝试使用 bash 的扩展模式匹配功能:
shopt -s extglob
cat !(readme.md|contrib.rst|licence.txt)
答案2
使用 bash 尝试一下:
GLOBIGNORE="readme.md:contrib.rst:licence.txt"
cat *
unset GLOBIGNORE
答案3
您已经尝试过什么?
您是否总是想跳过相同的文件?
在这种情况下,你可以在命令中对其进行硬编码。例如
find ! -name readme.md -o ! -name contrib.rst -o ! -name licence.txt -exec cat {} \+
现在,如果您想要跳过所有大于 4 行的文件,而事先不知道文件名,那么解决方案显然会变得更加复杂。在这种情况下,请编辑您的帖子。
答案4
不修改当前 shell 设置可以在子 shell 中执行 Cyrus 提出的每个建议
(GLOBIGNORE="readme.md:contrib.rst:licence.txt" ; cat *)
也
(shopt -s extglob; cat !(readme.md|contrib.rst|licence.txt))