运行 所有子目录中的 qsub 命令
Run a qsub command in all subdirectories
我在 HPC 上使用 Centos 运行 我的代码。我通常有一个包含 run_calc 文件的文件夹,这就是我想要 运行 的文件:
qsub run_calc
现在我想编写一个脚本 "submit_all.sh" 提交所有 run_calc 当前目录下所有子文件夹中的文件,而不是来自我 运行t 的父文件夹submit_all.sh 脚本。
我在这里发现了类似的问题Solution and here Solution2
这似乎是对这个问题的部分回答。在找到解决方案之前,我没有信心只提交脚本,这就是我问的原因:
在第二个 link 中,我找到了这个解决方案:
for i in {1..1000}; do
cd "$i"
qsub submit.sh
cd ..
done
"i" 是名称为 1-100 的文件夹列表。是否有可能以某种方式使用 find 创建所有子目录的列表并将其指向 for 循环?我将如何处理子目录?我是否可以更改 cd .. 语句,以便在那种情况下我总是直接返回到父文件夹?
我喜欢这个解决方案:Solution
#!/bin/sh
for i in `find /var/www -type d -maxdepth 1 -mindepth 1`; do
cd $i
# do something here
done
但是我不明白这是怎么回事?是否可以将上述脚本更改为仅深入包含 run_calc 文件并包含子子目录的文件夹?
提前致谢
假设您使用 bash
作为您的 shell:
$ cat ./test.sh
#!/bin/bash
IFS=$'\n'
while read -r fname ;
do
pushd $(dirname "${fname}") > /dev/null
qsub run_calc
popd > /dev/null
done < <(find . -type f -name 'run_calc')
find . -type f -name 'run_calc'
查找当前目录及其子目录中文件 run_calc
的所有路径。这是 while loop
.
的输入
pushd, popd
是 bash
特定的,添加到目录堆栈或从目录堆栈弹出。
for d in `find . -type d`
do ( cd "$d"
if test ! -f run_calc; then continue; fi
qsub run_calc
) done
( commnds )
在单独的进程中执行 commands
并且 cd
的效果不会 "leak".
我在 HPC 上使用 Centos 运行 我的代码。我通常有一个包含 run_calc 文件的文件夹,这就是我想要 运行 的文件:
qsub run_calc
现在我想编写一个脚本 "submit_all.sh" 提交所有 run_calc 当前目录下所有子文件夹中的文件,而不是来自我 运行t 的父文件夹submit_all.sh 脚本。
我在这里发现了类似的问题Solution and here Solution2 这似乎是对这个问题的部分回答。在找到解决方案之前,我没有信心只提交脚本,这就是我问的原因:
在第二个 link 中,我找到了这个解决方案:
for i in {1..1000}; do
cd "$i"
qsub submit.sh
cd ..
done
"i" 是名称为 1-100 的文件夹列表。是否有可能以某种方式使用 find 创建所有子目录的列表并将其指向 for 循环?我将如何处理子目录?我是否可以更改 cd .. 语句,以便在那种情况下我总是直接返回到父文件夹?
我喜欢这个解决方案:Solution
#!/bin/sh
for i in `find /var/www -type d -maxdepth 1 -mindepth 1`; do
cd $i
# do something here
done
但是我不明白这是怎么回事?是否可以将上述脚本更改为仅深入包含 run_calc 文件并包含子子目录的文件夹?
提前致谢
假设您使用 bash
作为您的 shell:
$ cat ./test.sh
#!/bin/bash
IFS=$'\n'
while read -r fname ;
do
pushd $(dirname "${fname}") > /dev/null
qsub run_calc
popd > /dev/null
done < <(find . -type f -name 'run_calc')
find . -type f -name 'run_calc'
查找当前目录及其子目录中文件 run_calc
的所有路径。这是 while loop
.
pushd, popd
是 bash
特定的,添加到目录堆栈或从目录堆栈弹出。
for d in `find . -type d`
do ( cd "$d"
if test ! -f run_calc; then continue; fi
qsub run_calc
) done
( commnds )
在单独的进程中执行 commands
并且 cd
的效果不会 "leak".