LinuxForum.Fans
Тема

Копирование файлов с условием

Автор: valet 5 сообщений 1487 просмотров
#245784

В линуксе пока начинающий, возникла такая возникла задача: нужно скопировать все файлы из заданных нескольких каталогов (например A, B, C) в один другой каталог (D).
Не было бы никаких проблем, но имена файлов в каталогах A, B, C пересекаются, то есть например во всех трех каталогах могут быть разные файлы тем самым именем - например x, и все эти файлы мне нужно получить в каталоге назначения то есть в D.

Просто через cp сделать не получится, так как будет происходить замена файла.

Имена файлов меня вообще не интересуют, мне главное получить в каталоге D все файлы, которые находятся в А+B+C.

Помогите разобраться в элементарном вопросе - как это сделать?

#245786

я бы что-нить такое сделал:

text

for I in A/* B/* C/*; do
  TRGT=$(basename $I)
  if [ -e "D/$TRGT" ]; do
    J=1
    while [ -e "D/${TRGT}_$J" ]; do
      J=$(( $J +1))
    done
    TRGT="${TRGT}_$J"
  fi
  cp $I D/$TRGT;
done

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

#245787

Кажется не работает.

text
valet@valet-debian:~/Документы$ mkdir A
valet@valet-debian:~/Документы$ mkdir B
valet@valet-debian:~/Документы$ mkdir C
valet@valet-debian:~/Документы$ echo "a" > A/x
valet@valet-debian:~/Документы$ echo "b" > B/x
valet@valet-debian:~/Документы$ echo "c" > C/x
valet@valet-debian:~/Документы$ mkdir D
valet@valet-debian:~/Документы$ vim script
записал в файл:
#!/bin/bash

for I in A/* B/* C/*; do TRGT=$(basename $I) if [ -e "D/$TRGT" ]; do J=1 while [ -e "D/${TRGT}_$J" ]; do J=$(( $J +1)) done TRGT="${TRGT}_$J" fi cp $I D/$TRGT; done

valet@valet-debian:~/Документы$ chmod +x script valet@valet-debian:~/Документы$ ./script ./script: line 5: syntax error near unexpected token `do' ./script: line 5: ` if [ -e "D/$TRGT" ]; do'

#245788

моя ошибка...

"Fat-Zer" написал:
for I in A/* B/* C/*; do
TRGT=$(basename $I)
if [ -e "D/$TRGT" ]; then
J=1
while [ -e "D/${TRGT}_$J" ]; do
J=$(( $J +1))
done
TRGT="${TRGT}_$J"
fi
cp $I D/$TRGT;
done
#245789

Подправил скрипт.

text
valet@valet-debian:~/Документы$ ./script 
valet@valet-debian:~/Документы$ ls D
x  x_1  x_2
valet@valet-debian:~/Документы$ cat D/x
a
valet@valet-debian:~/Документы$ cat D/x_1
b
valet@valet-debian:~/Документы$ cat D/x_2
c

Работает как часы. Большое спасибо за помощь, никогда бы до такого не додумался.

Войдите или зарегистрируйтесь, чтобы ответить.