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

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

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

我有一个类似的问题:

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

但是我怎样才能将这些文件(它们都有完全相同的名称)复制到新目录并为其添加父目录名称,以便我可以识别它们是从哪个目录复制的?

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

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

我在这个领域还只是个初级学生,所以我从正则表达式开始。我猜这里面应该有些用处,但我不知道具体怎么做。

因此,这是我的图形化问题。如何在我的 unix 终端上使用简单的命令或循环来执行此操作:

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

复制所有output_files.bam内容NEWDIR_output,使它们与父目录名称一起出现:

output_file_a1.bam
output_file_a2.bam                              
output_file_a3.bam

在此,非常感谢您的意见

答案1

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

下面的脚本将复制文件递归地从源目录到平坦的目录,将(直接)上级目录的名称添加到文件名中。目录的名称将被插入文件上可能的扩展,就像您的示例一样。

剧本

#!/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. 使用源目录和目标目录作为参数运行它:

    python3 /path/to/copyandrename.py <source_directory> <target_directory>
    

    我的测试命令是例如

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

与往常一样,请先在样品上进行测试!

答案2

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

$ 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一旦您检查它正在做正确的事情,就将其删除。

相关内容