我是bash的新手,对bash有一个非常基本的问题。 我有类似的文件:
a_lsst_z1.5_000.txt
a_lsst_z1.5_001.txt
a_lsst90_z1.5_001.txt
a_lsst_mono_z1.5_000.txt
a_lsst_mono_z1.5_001.txt
a_lsst_mono90_z1.5_000.txt
a_lsst_mono90_z1.5_001.txt
and so on
我只想列出没有lsst
的文件(lsst90
或lsst_mono
或lsst_mono90
。
我尝试过:
ls a_lsst_*.txt # but it gives all files
必填输出:
a_lsst_z1.5_000.txt
a_lsst_z1.5_001.txt
如何仅获取 lsst 文件?
答案 0 :(得分:3)
也许只是将_
之后的第一个字符匹配为数字?
echo a_lsst_[0-9]*.txt
编辑后,您只需匹配z1.5
部分:
echo a_lsst_z1.5_*.txt
答案 1 :(得分:1)
如果您想使用ls
并排除某些字符,可以尝试:
ls a_lsst[^9m]*.txt
这将排除lsst90和lsst_mono等文件。
答案 2 :(得分:1)
尝试
ls -ltr a_lsst_z1.5_*.txt
答案 3 :(得分:0)
find . -iname "a_lsst_*.txt" -type f -printf %P\\n 2>/dev/null
给出:
a_lsst_mono90_z1.5_001.txt
a_lsst_z1.5_000.txt
a_lsst_z1.5_001.txt
a_lsst_mono_z1.5_000.txt
a_lsst_mono_z1.5_001.txt
a_lsst_mono90_z1.5_000.txt
和
find . -iname "a_lsst_z1*.txt" -type f -printf %P\\n 2>/dev/null
给出:
a_lsst_z1.5_000.txt
a_lsst_z1.5_001.txt
在当前目录 find
中使用 .
命令并使用 -iname 在使用模式 a_lsst_*.txt
或 a_lsst_z1*.txt
时您将获得预期结果。>
使用 -type f 只匹配文件(不是目录)。
使用 -printf 和 %P
获取开头没有 ./
的路径,使用 \\n
以换行符结尾。
2>/dev/null
防止在使用 Permission denied
命令时显示任何错误,包括非常常见的 find
。