在不包含特定文件扩展名的目录中执行命令

在不包含特定文件扩展名的目录中执行命令

我正在寻找一种方法,找到所有不包含特定文件类型 (*.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 上的内容。

相关内容