查找不包括某些目录的文件

查找不包括某些目录的文件

我正在使用以下目录结构:

onathan@Aristotle:~/EclipseWorkspaces/ShellUtilities/ShellUtilities$ ls -R
.:
calculateTargetDay  CustomizeIso  ec  makeExecutable  Models  modifyElementList  Sourced  test file  Testing  valrelease

./Models:
testcase

./Sourced:
colors  stddefs  stdFunctions  SupportTesting

./Testing:
test  testCalculateTargetDay  testColors  testModifyElementList  testStddefs  testStdFunctions  testSupportTesting  tst

我想要做的是对顶级目录和目录中的所有文件运行命令测试. 我不想对目录中的文件运行该命令来源楷模。为此我运行了以下命令:

find . -name Sourced -prune -name Models -prune ! -name '\.*'  -execdir echo '{}' \;

此示例未针对目录结构中的任何文件运行命令。

当我针对相同的目录结构运行以下命令时:

find . ! -name '\.*'  -execdir echo '{}' \;

我得到了以下结果

./calculateTargetDay
./CustomizeIso
./Testing
./testModifyElementList
./test
./testColors
./testStdFunctions
./testCalculateTargetDay
./testStddefs
./testSupportTesting
./tst
./test file
./modifyElementList
./ec
./Sourced
./stdFunctions
./stddefs
./SupportTesting
./colors
./valrelease
./Models
./testcase
./makeExecutable

如您所见,我可以针对目录树运行一个命令,并将其应用于所有文件,或者我可以尝试进行选择,但最终不针对任何文件运行。如何才能选择性地应用我需要的命令?

答案1

您可以使用 Regex 从父目录中执行此操作:

find . -type f -regextype posix-egrep -regex '\./([^/]+|Testing/.*)$'

\./([^/]+|Testing/.*)$-type f将仅在当前目录和目录中查找所有文件( ) Testing

要运行命令,请添加-exec操作:

find . -type f -regextype posix-egrep -regex '\./([^/]+|Testing/.*)$' -exec echo {} \;

替换echo为您的实际命令。

例子:

$ find . -type f                                                                           
./foo
./Sourced/src
./Testing/test
./bar
./spam
./Models/model

$ find . -type f -regextype posix-egrep -regex '\./([^/]+|Testing/.*)$'                 
./foo
./Testing/test
./bar
./spam

$ find . -type f -regextype posix-egrep -regex '\./([^/]+|Testing/.*)$' -exec echo {} \;
./foo
./Testing/test
./bar
./spam

相关内容