linux - 如何在查找中排除特定文件

标签 linux shell find

假设我的目录结构是这样的

A--file1.cpp
   file2.cpp
   file3.cpp
   file1.h
   file2.h
   file3.h

B--file1.cpp
   file2.cpp
   file3.cpp
   file1.h
   file2.h
   file3.h

我的目标是在 A 文件夹中找到除 file1.cpp 之外的所有 cpp 文件

find A/B/-name\*.cpp 会找到所有文件,我试过 find A/B/! -name file1.cpp -name\*.cpp 这也将从 B 文件夹中排除 file1.cppfind A/B/-prune -o file1.cpp -name\*.cpp 也不起作用。正确的做法是什么?

最佳答案

-path 谓词可让您忽略特定文件或目录。

find . -path ./A/file1.cpp -prune -o -type f -name '*.cpp' -print

测试如下:

tempdir=$(mktemp -d "$TMPDIR"/test.d.XXXXXX)
cd "$tempdir" && {
  mkdir -p A B
  touch {A,B}/file{1,2,3}.{cpp,h}
  find A B -path A/file1.cpp -prune -o -type f -name '*.cpp' -print
  rm -rf -- "$tempdir"
}

...发射输出:

A/file2.cpp
A/file3.cpp
B/file1.cpp
B/file2.cpp
B/file3.cpp

关于linux - 如何在查找中排除特定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42498350/

相关文章:

java - 将参数传递给脚本 - 参数是位于上一个目录的配置文件

linux - 通过 cronjob 运行 gpg 加密命令

linux - 如何为Vec <f64>使用共享内存?

linux - 尽管确实存在,但在 Alpine Docker 容器中收到 [Not Found] 错误

c++ - “Add to project list”在Qt项目管理对话框中是灰色的

linux - 使用find从两个目录中删除同名文件

algorithm - 在排序数组中查找所有重复项和缺失值

linux - 如何使用 find 更改文件和目录名称?

linux - Shell 命令语法,单个选项的输入参数数组

vba - Excel VBA : Way to find the value of a cell with multiple criteria