如何在find中排除特定文件

时间:2017-02-28 00:36:47

标签: 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也不起作用。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

-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