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
文件,因此我的问题可能太简单了,让我编辑它,我将感谢适当修改的更新答案。