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 '.*[!~]'