2015-03-31 3 views
0

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

from=/home/cmoon/OR5P3_4nax 
to=/home/cmoon/total_decomp 

Поскольку имена каждой папки в $from соответствуют этим папкам в $to мне нужно скопировать какой-либо файл (md.in) из одной папки в другую с помощью:

for sim in ${from}/OR5P3_* ; do 
if [[ -d $sim ]]; then 
    title=$(basename "$sim") 
    pushd $sim 
    cp md.nc ${to}/${title}/md3.nc 
    popd 
fi 
done 

Здесь я использую ${title}, чтобы убедиться, что md.nc будет скопирован из каждой исходной папки в каталоге dir1 с таким же именем в каталоге dir2:

e.g /${from}/lala1 -> /${to}/lala1 
e.g /${from}/lala2 -> /${to}/lala2 
e.g /${from}/lala10 -> /${to}/lala10 

Правильно ли этот скрипт?

Как добавить сообщение для печати в сценарий, чтобы увидеть, с какой именно (я думаю, используя PWD) папку.

+2

использование 'ср -V' для подробного вывода. – arco444

ответ

0

Если каталог ${to}/${title} не существует, копия не удалась. Убедитесь в том, что существует первая:

mkdir -p "$to/$title"   # use `-p` to avoid error if it already exists 
cp md.nc "$to/$title/md3.nc" 

Помните цитировать ваши "$vars" - брекеты не то же самое.

0

Has @ arco444 предлагает вам cp -v, cp затем выдает from -> to.

В противном случае вы можете добавить в цикле:

echo "coping in folder: $to/$title" 
Смежные вопросы