无法使用 find 命令排除某些路径

无法使用 find 命令排除某些路径

在我的主目录中,我想查找当前目录中除以下 2 个目录之外的所有文件:

./.mozilla
./.cache/mozilla

按照此解决方案:https://unix.stackexchange.com/questions/508054/using-find-to-exclude-multiple-paths-matching-patterns

find . \( -path "/home/achille/.cache/mozilla/*" -o -path "/home/achille/.mozilla/*" \) -prune -o -type f -print | grep mozilla

按照此解决方案:查找文件但排除几个目录?

find . -not -path "/home/achille/.cache/mozilla/*" -not -path "/home/achille/.mozilla/*" -type f -print | grep mozilla

按照这个解决方案:https://stackoverflow.com/questions/14132210/use-find-command-but-exclude-files-in-two-directories

find . -type f ! -path "/home/achille/.cache/mozilla/*" ! -path "/home/achille/.mozilla/*" -print | grep mozilla

(对于每次尝试,我还尝试使用“/home/achille”而不是“。”。预计每个命令都没有输出,但我得到的却是以下内容:

  [...]

./.cache/mozilla/firefox/lnzaa3h4.default/safebrowsing/ads-track-digest256.pset

答案1

另一种方法。

如果你真的想忽略全部'.mozilla' 和 '.cache/mozilla' 文件。这基本上匹配所有文件,除了匹配这两个模式的文件。

find . -not -name ".mozilla" -and -not -wholename ".cache/mozilla" -print

在哪里

-not       means negate the following command
-name      is the name of the file you are (or not) looking for
-and       means matching first test and the second test must pass
-wholename matches name with a path.
-print     display the results  (also is optional since default is display result)

另一方面,这里则相反,只找到符合两个模式的文件。

$ find . -name "mozilla" -or -name "*.mozilla"

示例结果

 $ find . -name ".mozilla"

./.mozilla

 $ find . -name "mozilla"

./.cache/mozilla

 $ find . -name "mozilla" -or -name "*.mozilla"

./.mozilla
./.cache/mozilla

有趣的是,当在行尾添加 '-print' 时,只返回一个结果。

 $ find . -name "mozilla" -or -name "*.mozilla" -print
./.mozilla

所以需要添加括号

 $ find . \( -name "mozilla" -or -name "*.mozilla" \) -print
./.mozilla
./.cache/mozilla

或者在 -or 语句的两边添加 -print

 $ find . -name "mozilla" -print -or -name "*.mozilla" -print
./.mozilla
./.cache/mozilla

相关内容