В Linux скопируйте файлы с одинаковыми именами из нескольких каталогов в новый каталог с разницей в пути в качестве имени

#linux #copy #cp

#linux #Копировать #cp

Вопрос:

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

 /project/folder1/folder2/samplenumber/file.filetype
 

Мне нужно скопировать все это из размещенной области в мою собственную рабочую область для анализа

Я хочу, чтобы в итоге

 /mydrive/myproject/myfolder/samplenumber.filetype
/mydrive/myproject/myfolder/samplenumber.filetype
/mydrive/myproject/myfolder/samplenumber.filetype
 

Я подумал что-то вроде

 cp -v /project/folder1/folder2/*/file.filetype /mydrive/myproject/myfolder/*.filetype
 

будет ли это работать?

Ответ №1:

Для этого вам нужно будет использовать команду find, анализируя вывод в цикле

 find /project/folder1/folder2 -name "*.filetype" | while read line
do 
    payth=${line%/*.*}
    samp=${payth#/*/*/*/}
    cp "$line" "/mydrive/myproject/myfolder/$samp.filetype"
done
 

Для каждой строки, возвращаемой командой find, мы устанавливаем переменную payth в путь к файлу (используя расширение параметра bash и соответствие шаблону суффикса). Затем мы используем эту переменную payth для получения последнего каталога (используя расширение параметра bash и соответствие шаблону префикса), считывая это в переменную samp. Эта переменная samp, наконец, используется как имя файла в команде копирования.