我想使用find
正则表达式在目录中搜索一些文件。
如果我做
cd dir
find -E . -type f -regex '^\..*[^~]'
Run Code Online (Sandbox Code Playgroud)
我得到目录中与正则表达式匹配的文件列表。
但是,如果我这样做
find -E ~/dir -type f -regex '^\..*[^~]'
Run Code Online (Sandbox Code Playgroud)
IE
find -E /home/adam/dir -type f -regex '^\..*[^~]'
Run Code Online (Sandbox Code Playgroud)
我没有输出。find
使用正则表达式时如何指定要搜索的目录?
这是 BSD find
,因为我在 Mac 上。
的参数-regex
必须匹配找到的整个路径。类似的命令find .
查找类似的路径./dir/subdir/somefile
,而类似的命令find ~/dir
查找类似的路径/home/adam/dir/subdir/somefile
。所以你的正则表达式必须与/home/adam
开头的部分匹配
。
该命令find -E . -type f -regex '^\..*[^~]'
查找名称不包含换行符且不以~
. 在.
一开始总是匹配由于路径开头./
。
如果您要查找点文件,则需要允许目录前缀。以下命令显示名称不以 结尾的点文件~
:
find -E /whatever -regex '(\n|.)*/\.[^/]*[^~]'
Run Code Online (Sandbox Code Playgroud)
但这更容易表达-name
:
find /whatever -name '.*[!~]'
Run Code Online (Sandbox Code Playgroud)