我一直在寻找有关“将文件从多个目录复制到一个目录”的所有可能的答案,但我找不到答案。我需要一些更具体的数据库处理方法。
我有一个类似的问题:
但是我怎样才能将这些文件(它们都有完全相同的名称)复制到新目录并为其添加父目录名称,以便我可以识别它们是从哪个目录复制的?
是的,如果我没有 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))
如何使用
- 将脚本复制到一个空文件中,并将其另存为
copyandrename.py
使用源目录和目标目录作为参数运行它:
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
一旦您检查它正在做正确的事情,就将其删除。