使用 -regex 搜索文件时如何使用 find 指定文件路径

使用 -regex 搜索文件时如何使用 find 指定文件路径

find我想使用正则表达式在目录中搜索某些文件。

如果我做

cd dir
find -E . -type f -regex '^\..*[^~]'

我得到了目录中与正则表达式匹配的文件列表。

但是,如果我这样做

find -E ~/dir -type f -regex '^\..*[^~]'

IE

find -E /home/adam/dir -type f -regex '^\..*[^~]'

我没有得到任何输出。find使用正则表达式时如何指定要搜索的目录?

这是 BSD find,就像我在 Mac 上一样。

答案1

的参数必须-regex与找到的整个路径相匹配。类似的命令find .会查找类似的路径./dir/subdir/somefile,而类似的命令find ~/dir会查找类似的路径/home/adam/dir/subdir/somefile。所以你的正则表达式必须匹配 /home/adam开头的部分。

该命令find -E . -type f -regex '^\..*[^~]'查找名称不包含换行符且不以~..由于路径以 开头,因此开头的始终匹配./

如果您正在寻找点文件,则需要允许目录前缀。以下命令显示名称不以 结尾的点文件~

find -E /whatever -regex '(\n|.)*/\.[^/]*[^~]'

但这用以下方式表达更简单-name

find /whatever -name '.*[!~]'

相关内容