如何从多个目录复制文件,将父文件夹的名称添加到文件名?

我一直在寻找关于“将文件从多个目录复制到一个目录”的所有可能答案,但我找不到答案。 我需要一些稍微更具体的数据库处理方法。

我有一个类似的问题:

将文件从多个目录复制到另一个多目录

但是如何将这些文件(它们都具有完全相同的名称)复制到新目录并添加父目录名称,以便我可以识别它们被复制到哪个目录?

是的我可以一个接一个地复制和重命名每个名字,如果我没有100个:)

我尝试使用find循环。 等,但仍然,我无法添加复制的文件父目录名称。

我还处于这个领域的初级阶段,因此我从正则表达式开始。 我想这里有一些事要做,但我无法弄清楚究竟是怎么回事。

所以,这是我的问题。 如何在我的unix终端上使用简单的命令或循环来做到这一点:

DIR_a1 --> output_file.bam DIR_a2 --> output_file.bam DIR_a3 --> output_file.bam 

复制NEWDIR_output所有output_files.bam ,使它们显示为父目录名:

 output_file_a1.bam output_file_a2.bam output_file_a3.bam 

提前,非常感谢任何意见

将文件从源复制到目标目录,将包含文件夹的名称添加到文件中

下面的脚本将递归地将文件从源目录复制到平面目录中,将(直接)上级目录的名称添加到文件的名称中。 目录的名称将在文件上可能的扩展名之前插入,与您的示例完全相同。

剧本

 #!/usr/bin/env python3 import os import sys import shutil for root, dirs, files in os.walk(sys.argv[1]): for f in files: # split off the superior directory's name dirname = root.split("/")[-1] # define file+path, possible extension position src = os.path.join(root, f); spl = f.rfind(".") # defining new filename newname = f[:spl]+"_"+dirname + f[spl:] if spl != -1 else f+"_"+dirname # copy the file into the new directory shutil.copyfile(src, os.path.join(sys.argv[2], newname)) 

如何使用

  1. 将脚本复制到空文件中,将其另存为copyandrename.py
  2. 使用source和target目录作为参数运行它:

     python3 /path/to/copyandrename.py   

    我的测试命令是例如

     python3 '/home/jacob/Bureaublad/pscript_4.py' '/home/jacob/Bureaublad/testmap' '/home/jacob/Bureaublad/target' 

一如既往,请先测试样品!

您应该能够使用shell的参数替换function来执行此操作,例如

 $ for d in DIR_a*; do echo cp -- "$d/output_file.bam" "NEWDIR_OUTPUT/output_file${d#DIR}.bam"; done cp DIR_a1/output_file.bam NEWDIR_OUTPUT/output_file_a1.bam cp DIR_a2/output_file.bam NEWDIR_OUTPUT/output_file_a2.bam cp DIR_a3/output_file.bam NEWDIR_OUTPUT/output_file_a3.bam 

一旦检查到它正在做正确的事情,就删除echo