忽略查找中的目录路径(在shell中)[重复]

Posted

技术标签:

【中文标题】忽略查找中的目录路径(在shell中)[重复]【英文标题】:Ignore directory path in find (in shell) [duplicate] 【发布时间】:2015-08-06 09:08:24 【问题描述】:

我正在尝试在某个目录中查找文件并忽略某些路径。

cd /some/dir && find . -type f ! -path ./media 不起作用。哪里出错了?

不应忽略子目录中的任何同名目录。例如/some/media/.

附:同样掩码./media/* 也不起作用。

P.P.S 是的,我知道我可以像 grep -vE "^(\./dir1|\./dir2)" 一样使用 grep。有机会使用 find only 吗?

【问题讨论】:

! -path ./media 仅对于确切的目录(或文件)./media 是错误的,对于该目录中的任何内容(例如 ./media/somefile)仍然是正确的。你想要find . -type f ! -path ./media ! -path './media/*'find . -path ./media -prune -o -type f -print(这实际上会停止遍历目录而不是仅仅不打印它,尽管两者都应该产生相同的输出) 【参考方案1】:

您可以使用-regex 选项:

find -type f ! -regex '.*/media/.*'

【讨论】:

.*/media/.* 应该只是 ./media/.* (第一个 . 可能也需要转义)以满足 Any directory with the same name in subdirs shouldn't be ignored 是的,同意。我在开头使用点。

以上是关于忽略查找中的目录路径(在shell中)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

shell创建长目录,目录存在则忽略,缺失则创建

使用带有列表的 shell=True 时忽略 subprocess.call() 参数 [重复]

忽略正则表达式中的撇号[重复]

shell find命令使用简介

shell find命令使用简介

在 Perl 脚本中使用 File::Find 时忽略整个目录