Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在查找中排除特定文件_Linux_Shell_Find - Fatal编程技术网

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

Linux 如何在查找中排除特定文件,linux,shell,find,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-na

假设我的目录结构如下

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.cpp
find 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

-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

我尝试了
查找A/B/-path./A/file1.cpp-prune-o-typef-print
,它显示了我用测试过程和输出修改的所有6个文件。您可以自己复制和粘贴它。您的
-path
谓词需要根据传递给
find
path
参数写入名称,告诉它从何处/如何开始搜索。因此,如果您传递
find
目录名
A
,它是
A/file1.cpp
。它可以工作,但我的文件夹中也有
.h
文件,因此我的问题可能太简单了,让我来编辑它,我会很感激一个经过适当修改的更新答案。我尝试了
查找A/B/-path./A/file1.cpp-prune-o-type f-print
,它显示了我用测试程序和输出修改的所有6个文件。您可以自己复制和粘贴它。您的
-path
谓词需要根据传递给
find
path
参数写入名称,告诉它从何处/如何开始搜索。因此,如果您传递
find
目录名
A
,它是
A/file1.cpp
。它可以工作,但我的文件夹中也有
.h
文件,因此我的问题可能太简单了,让我编辑它,我将感谢适当修改的更新答案。