如何比较和移动不同位置的匹配字符串文件

如何比较和移动不同位置的匹配字符串文件

我有两个不同的。压缩文件/tmp/1//tmp/2

我想比较这两个不同的位置文件,并将匹配的字符串文件移动到/tmp/3

/tmp/1

ArchiveFile_aaa.zip
ArchiveFile_bbb.zip
ArchiveFile_mmm.zip
ArchiveFile_ccc.zip
ArchiveFile_zzz.zip

/tmp/2

ArchiveFile_aaa.zip
ArchiveFile_bbb.zip
ArchiveFile_ccc.zip
ArchiveFile_ddd.zip
ArchiveFile_eee.zip
ArchiveFile_zzz.zip
ArchiveFile_ttt.zip
ArchiveFile_mmm.zip
ArchiveFile_fff.zip

我可以使用以下方法获取这些文件的相同字符串

grep -f /tmp/1 /tmp/2

。但是如何将这些匹配的字符串文件移动到/tmp/3

答案1

我求助于 python,它应该适用于任何版本的 Python,但我只在 Linux 上进行了测试。对于 Windows,您可能需要反转“/”。

我还没试过邪恶的文件名 - 但名称要简单。

使用

python dir_merge.py DIR1 DIR2 DIR3

其中 DIR1 是包含文件的目录,DIR2 也是包含文件的目录。DIR3 可以已经存在,也可以被创建 - 只有公共文件才能进入此目录。文件将重命名为 DIR3

import sys
import os
import pprint

''' 
usage: Python dir_merge.py Directory1 Directory2 NEW_DIRECTORY

i.e.
       python dir_merge.py tmp1 tmp2 tmp3
'''

d1=sys.argv[1]
d2=sys.argv[2]
d3=sys.argv[3]

files_in_d1 = os.listdir(d1)
files_in_d2 = os.listdir(d2)

print("Contents of d1 are...")
pprint.pprint(files_in_d1)
print("Contents of d2 are...")
pprint.pprint(files_in_d2)

common_files = list(set(files_in_d1).intersection(files_in_d2)) 
print("Common Files are ")
pprint.pprint(common_files)
if len(common_files) > 0:
  try:
    os.mkdir(d3)
  except:
    print("Can not create a directory")

  for f in common_files:
     os.rename(d1+'/'+f,d3+'/'+f)
     print("Moved file "+f)
else:
  print("Nothing Matches in the 2 directories")

让我知道你是怎么做到的...我应该检查你是否在开始时输入了 3 个值 - 但这取决于你。

问候

相关内容