在我的主目录中,我想查找当前目录中除以下 2 个目录之外的所有文件:
./.mozilla
./.cache/mozilla
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