我正在寻找一种方法,找到所有不包含特定文件类型 (*.log) 的 (子) 文件夹,然后在该文件夹中执行命令。我的所有模拟文件夹都包含三个不同的文件:*.bat、*.par 和 *pm。要启动模拟,我使用命令
find . -name "*.bat" -exec bash -c ' dir=$(dirname "$1"); cd "$dir"; startcommand start.bat ' sh {} \;
因此它寻找所有包含 * 的文件夹。蝙蝠然后执行启动命令。模拟启动后,会创建一个新的文件类型:*。日志。现在我需要一个命令来检查所有不包含 * 的文件夹。日志文件并在这些目录内执行启动命令。
我已经找到了一种列出所有不包含 *.log 的文件夹的方法。
find ./* -type d '!' -exec sh -c 'ls -1 "{}"|egrep -i -q "\.log$"' ';' -print
不幸的是,我不知道如何实现进入该目录并执行启动命令的最后一步。有人知道吗?
答案1
这时 GNUfind
命令-execdir
可能会有用:
-execdir command ; -execdir command {} + Like -exec, but the specified command is run from the subdirec‐ tory containing the matched file, which is not normally the directory in which you started find.
例如给定
$ tree subdir?
subdir1
├── bar.log
└── foo.bat
subdir2
└── foo.bat
subdir3
├── bar.log
└── foo.bat
0 directories, 5 files
然后
$ find . -name '*.bat' -execdir sh -c 'set -- *.log; [ -e "$1" ] || echo "${PWD##*/} has no log file"' {} \;
subdir2 has no log file
||
用您想要运行的命令替换 RHS 上的内容。