![Find命令列出仅由“数字”(0-9)组成的目录名称](https://linux22.com/image/132042/Find%E5%91%BD%E4%BB%A4%E5%88%97%E5%87%BA%E4%BB%85%E7%94%B1%E2%80%9C%E6%95%B0%E5%AD%97%E2%80%9D%EF%BC%880-9%EF%BC%89%E7%BB%84%E6%88%90%E7%9A%84%E7%9B%AE%E5%BD%95%E5%90%8D%E7%A7%B0.png)
在特定路径中,我有一些目录(日期作为文件名),例如:
- 如果目录名称类似于 20180423,则应列出它
- 如果目录名称类似于 20180423-backup 或 20180423backup,则不应列出它。
答案1
你想在这里使用双重否定:
LC_ALL=C find . ! -name '*[!0-9]*' -type d
即列出名称不包含非数字的目录类型的文件。
如果没有LC_ALL=C
,某些find
实现(包括 GNU)find
也可以列出名称包含在当前语言环境中不形成有效字符的字节序列的文件(例如在使用 UTF-8 作为字符集的语言环境中répertoire
以 iso8859-1 ( mkdir $'r\xe9pertoire'
) 编码的文件)。
使用zsh
,您还可以执行以下操作:
print -rC1 -- **/<->(ND/)
答案2
如果你有 GNU 找到:
find . -regex '^./[0-9]*$'
如果更改,请调整正则表达式 ( ) 的开头^./
以匹配起始路径 ( )。.
答案3
两种解决方案:
使用 GNU find
:
find /particular/path -type d -regextype egrep -regex '.*/[0-9]{8}'
与标准find
:
find /particular/path -type d -name '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
这些将查找其中或之下/particular/path
名称由八位数字组成的任何目录并显示其路径名。
如果您通过“列表”表示您想要查看这些目录的内容,那么您可以通过添加-exec ls {} ';'
.