如何在文件夹树中找到所有不包含字母数字字符的文件

如何在文件夹树中找到所有不包含字母数字字符的文件

我从别人那里接管了大量历史数据。然而,在我看来,文件名完全是随机的,而且格式很糟糕。

首先,我想获取包含空格或除 AZ、0-9、.、-、_ 之外的任何字符的所有文件的列表,是否有办法在 Linux 上的命令行中使用正则表达式语法来执行此操作?

答案1

find . -type f | grep -i '[^a-z0-9\.\/_\-]'

a-z这将匹配所有包含除、0-9、点、斜线(用于目录)、下划线或连字符减号之外的字符的文件。

笔记:这会不是如果文件(或路径)包含换行符,则有效,因为管道grep会将文件路径分成两部分。虽然并不常见,但应该提到。


使用 Zsh 的简单解决方案(它需要setopt EXTENDED_GLOB):

ls -l **/*[^a-zA-Z0-9-_.]##*

递归**到目录中,并*匹配零个或多个任意字符。白名单字符的否定模式需要匹配至少一次(##)。

答案2

如果您有locate命令,您可以执行以下操作:

locate --basename --regex "[^0-9A-Za-z\.\_\-]"

在 centos 系统中,您可以通过运行 yum -y install updatedb 来安装locate。然后您需要运行 updatedb 命令,然后运行locate。

在此命令中,basename 强制定位仅搜索文件名而不是完整目录路径,并且 regex 在此文件名上运行给定的 reg expr。

答案3

这将突出显示奇怪的文件,但不会只打印它们:

查找 . -type f -maxdepth 1 | grep --color='auto' [[:alnum:]]

相关内容