我正在使用C shell脚本。我有2个目录名称dir1和dir2,都包含n个文件。我必须同时处理文件。让我解释一下:我有一个命令可以进行一些处理并给出输出。例如
score = custom_command (file from dir1 , file from dir2)
我需要将其作为批处理来完成。如何编写脚本来执行此操作?
这是我所做的(算法),但它不起作用:这是我认为的逻辑缺陷。 用python语言做任何帮助也很受欢迎,我想我们不具备通过多个目录读取文件的功能。
foreach filename1 in dir1
cd dir2
foreach filename2 in dir2
cd -
score = custom_command ($filename1 , $filename2)
end
end
答案 0 :(得分:0)
您想同时运行N ^ 2个进程吗?尝试(在bourne shell中):
for f1 in /p/a/t/h/dir1/*; do for f2 in /p/a/t/h/dir2/*; do cmd $f1 $f2& done; done
停止使用csh! (我假设您的评论“使用csh,但任何算法也会起作用”意味着“任何语言都能正常工作”。)
答案 1 :(得分:0)
以下是用Python描述的一种方法:
import os
import itertools
dir1='/tmp/x'
dir2='/tmp/z'
files1 = [os.path.join(dir1,x) for x in sorted(os.listdir(dir1))]
files2 = [os.path.join(dir2,x) for x in sorted(os.listdir(dir2))]
def custom_command(file1, file2):
# Some custom code goes here,
# for example, this meaningless drivel
return os.path.getsize(file1)*os.path.getsize(file2)
for file1, file2 in itertools.product(files1, files2):
score = custom_command(file1, file2)
print file1, file2, score
可替换地,
import os
import itertools
dir1 = '/tmp/x'
dir2 = '/tmp/z'
def custom_command(file1, file2):
# Some custom code goes here,
# for example, this meaningless drivel
return os.path.getsize(file1)*os.path.getsize(file2)
for file1 in os.listdir(dir1):
for file2 in os.listdir(dir2):
file1 = os.path.join(dir1, file1)
file2 = os.path.join(dir2, file2)
score = custom_command(file1, file2)
print file1, file2, score