同时处理2个文件夹

时间:2015-04-10 14:21:56

标签: python csh

我正在使用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

2 个答案:

答案 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