Как скопировать файлы с нескольких каталогов, добавив имя родительской папки к имени файла?

Я обращался ко всем возможным ответам о "копировании файла от нескольких каталогов до одного единственного каталога", но я не могу найти свой ответ. Мне нужно что-то немного более специфичное для моей обработки базы данных.

У меня есть подобный вопрос:

копирование файлов от нескольких каталог другому несколько каталог

но как я могу скопировать эти файлы (у них всех есть точно то же имя) к новому каталогу, и добавьте их название родительского каталога, так, чтобы я мог распознать, с которого каталога они были скопированы?

Да я мог скопировать и переименовать каждое имя один за другим, если бы у меня не было 100 из них :)

Я попробовал циклы находкой. и т.д., но тем не менее, я не могу добавить скопированные файлы родительское имя каталога.

Я являюсь все еще младшим в этом поле, и таким образом, я запускаю с regex. Я предполагаю, что существует что-то, чтобы сделать здесь с ними, но я не могу выяснить как точно.

Так, это - мой вопрос графически. Как сделать это с простой командой или циклом, на моем терминале 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
задан 13 April 2017 в 15:23

2 ответа

Необходимо смочь сделать, это использующее функции замены параметра оболочки, например,

$ 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, после того как Вы проверили, что это делает правильную вещь.

2
ответ дан 3 December 2019 в 06:57

Копирование файлов из источника - в целевой каталог, добавление имени containg папки к файлу

Сценарий ниже скопирует файлы рекурсивно с исходного каталога в плоский каталог, добавляя название (прямого) превосходящего каталога к имени файла. Имя каталога будет вставлено перед возможным расширением на файле, exacvtly как Ваш пример.

Сценарий

#!/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. Скопируйте сценарий intyo пустой файл, сохраните его как 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
ответ дан 3 December 2019 в 06:57

Другие вопросы по тегам:

Похожие вопросы: