2014-10-08 60 views
1

我有两个目录如何匹配文件名在不同的目录?(bash或蟒蛇)

一组文件的

〜/桌面/ DIR1和〜/桌面/ DIR2

我需要在比赛上的文件DIR1在DIR2文件或反之亦然

名在/ DIR1是:1.out,2.out ... 21.out

名在/ DIR2是:CHR-1.out,CHR-2 .out ... chr-21.out

我在python中编写了一个绘图脚本,它接受文件名的命令行参数,并根据文件内容构建一些图。所以问题是如何匹配文件并将其提供给脚本?我试图使用bash,但我不知道如何做到这一点。也许这是可能的,从Python?

我本可以通过手工完成,但我宁愿学习如何自动完成。

回答

4

在bash,使用参数扩展:

#!/bin/bash 
for f in dir1/*.out 
    echo "$f" "dir2/chr-${f#dir1/}" 
done 
+0

感谢它的工作。 我的脚本看起来像这样: for ./dir1*.out; do python ./plot.py“$ f”“./dir2/chr-${f#./dir1/}”“$ f” done 问题在于它会用图表替换dir2中的文件。有没有办法只提供一个数字作为第三个参数? – YKY 2014-10-08 14:52:37

+1

@YKY:'num = $ {f#dir1 /}; num = $ {num%.out}' – choroba 2014-10-08 15:24:57

1

或者Python中(从桌面工作):

import os 

for file1 in os.listdir('dir1'): 
    for file2 in os.listdir('dir2'): 
     if file1 in file2: 
      print(file1) 

有可能这样做,但说的更有效的方式是一个快速和肮脏的方法,应该比较灵活。

+1

为什么要手动循环访问'list2' **和**使用'in'?这不是多余的吗?我会想一个手动循环*或*列表2中的file1。 – 2014-10-08 14:50:43

+0

,因为文件名称不一样 - 这很麻烦。假设这些名字有这些小小的变化,我们就不得不妥协了。 'chr-1.out'=='True'中的'1.out'。 - 否则是的,我会在list2中完成与file1的单个循环。 – Scironic 2014-10-08 14:57:00

+3

这种方法的另一个问题是''1.out'在'chr-21.out'== True'中。 – chthonicdaemon 2014-10-08 14:57:52