Linux скрипт для копирования файлов с нескольких машин Windows - PullRequest
0 голосов
/ 21 апреля 2011

При попытке создать скрипт bash, который будет считывать IP-адрес и имена пользователей из файла, который монтирует соединение с этим общим ресурсом в Windows, а затем копировать другие типы файлов в новую папку, которая называется именем пользователя.На данный момент он не совсем работает, он создает сотни папок с именем * .ano, если не может найти общий ресурс Windows.

Помогите пожалуйста

Текстовый файл:

192.168.0.2 user1
192.168.0.3 user2

bash script:

USER='/home/user/user.ip'
IPADDY=$(grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' $USER)
USERNAME=$(awk '{ print $NF }' $USER)
for i in $IPADDY $USERNAME
do
    mkdir /home/user/Documents/$USERNAME
    mount -t smbfs //$IPADDY/$USERNAME /home/user/$USERNAME
    rsync -va /home/user/$USERNAME/*.ano /home/user/Documents/$USERNAME/*.ano
done

Привет всем, спасибо за такой быстрый ответ, у меня есть изменениякод, как следует, но все еще получить несколько файлов, я сделал что-то не так здесь

    USER='/home/user/user.ip'
IPADDY=$(grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' $USER)
USERNAME=$(awk '{ print $NF }' $USER)
while read IPADDY USERNAME; do
mkdir /home/user/Documents/$USERNAME
mount -t smbfs //$IPADDY/$USERNAME /home/user/$USERNAME
rsync -va /home/user/$USERNAME/*.ano /home/user/Documents/$USERNAME/
done < $USER

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

Проблема в команде for. В вашем скрипте i перебирает содержимое $ IPADDY, затем перебирает содержимое $ USERNAME. Между тем, $ USERNAME внутри цикла расширяется до user1 user2, в результате чего:

mkdir /home/user/Documents/user1 user2

Линия монтирования становится:

mount -t smbfs //192.168.0.2 192.168.0.3/user1 user2 /home/user/user1 user2

и т. Д.

Скорее, зациклите сам файл:

while read IPADDY USERNAME; do
  #awesome things here based on $IPADDY and $USERNAME
done < $USER

Возможно, вы захотите добавить [[ -z $IPADDY ]] && continue, чтобы пропустить любые возможные пустые строки в файле.

0 голосов
/ 21 апреля 2011

Одна проблема заключается в том, что вы используете подстановочный знак (*) для файлов назначения. Но эти файлы не существуют - поэтому /home/user/Documents/$USERNAME/*.ano не может соответствовать, и rsync создаст файл *.log.

Лучше сделать:

rsync -va /home/user/$USERNAME/*.ano /home/user/Documents/$USERNAME/
...