【发布时间】:2011-06-24 16:47:30
【问题描述】:
#!/bin/sh
for i in {0..999}
do
if [$i lt 10]
then
nohup java BeginIndex ~actors/00{$i} ~/index_new/ > ~/results/actors_results/00{$i}.txt
echo "INDEXING ($i)th directory completed "
elif [$i lt 100]; then
nohup java BeginIndex ~/actors/0{$i} ~/index_new/ > ~/results/actors_results/0{$i}.txt
echo "INDEXING ($i)th directory completed "
else
nohup java BeginIndex ~/actors/{$i} ~/index_new/ > ~/results/actors_results/{$i}.txt
echo "INDEXING ($i)th directory completed "
fi
done
谁能告诉我这个脚本有什么问题?我需要先做#!/bin/bash 吗?另外,我可以按照它的编写方式 nohup 这个脚本,还是我必须删除 if-else 语句中的 nohup?我真的不知道 bash 的 if-else 和 for 循环的所有语法......对不起,如果这是一个如此简单的问题。感谢您的帮助!
编辑(从 cmets 发布更新)
我正在尝试索引一个名为 actor 的目录,其中包含 1000 个子目录,其中包含文件。 java 程序会运行,但它无法处理这 1000 个目录中的所有文件(约 180 万个)。我想编写一个脚本,一次执行子目录。
我正在通过 ssh 连接到服务器来执行此操作,但这需要一段时间,所以我希望它不会丢失。我不能只在整个目录上运行 java 程序,因为它耗尽了堆内存。它不是最有效的 Java 代码,但我正在研究解决该问题的另一种方法,同时该脚本一次运行子目录。
【问题讨论】:
-
首先,你想做什么?只有这样我们才能说它有什么问题。
-
您是否尝试过为程序提供绝对路径而不是相对路径(使用
~)?另外,能否澄清目前脚本有什么问题?注意 - nohup 很好,它应该可以工作;您可能希望在末尾附加&,以便它在后台运行而不是阻塞。最后,请用更多信息更新问题,而不是在 cmets 中发布。 -
哦,对不起,我刚刚添加了那些〜,因为它们都在不同的文件夹中,我不想弄乱屏幕:) 我想我会试试 Kerrek 的答案。