当该文件没有对应的文件时,如何找到并执行该程序?
示例文件:
/file1.c
/file1.h
/file2.c
/file3.c
/file3.hpp
/file4.c/unrelated.txt
find / -type f -name '*.c' -exec my_program_here {} \;
执行于:
/file1.c
/file2.c
/file3.c
但我想过滤掉那些有相应.h
文件的。最后,my_program_here
应该运行在:
/file2.c
/file3.c
就我而言,如何过滤掉*.h
存在的所有结果?
尝试执行
sh
包装器my_program_here
而不是直接运行它。例如:或者(仅 fork sh 一次并迭代所有匹配的 .c 文件):
这些使用 shell 的参数扩展
%
“删除匹配后缀”功能来检查当前正在处理的 .c 文件是否存在匹配的 .h 文件。如果不存在,它将执行 my_program_here,并将文件名作为参数。来自https://pubs.opengroup.org/onlinepubs/007908775/xcu/chap2.html
此功能在 bash、ksh 和其他与 posix 兼容的类 bourne shell 中可用。