我正在使用以下目录结构:
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
我想要做的是对顶级目录和目录Testing中的所有文件运行命令。我不想对Sourced和Models目录中的文件运行命令。为此,我运行了以下命令:
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
如您所见,我可以对目录树运行一个命令并将其应用于所有文件,或者我可以尝试有选择性并最终不运行任何文件。我怎样才能有选择地应用我需要的命令?
您可以使用 Regex 从父目录中执行此操作:
\./([^/]+|Testing/.*)$
-type f
将在当前目录和仅在目录中查找所有文件 ( )Testing
。要运行命令,请添加
-exec
操作:替换
echo
为您的实际命令。例子: