簡體   English   中英

用於從多個Windows機器復制文件的Linux腳本

[英]Linux script for copying files from multiple windows machines

嘗試制作bash腳本時遇到問題,該腳本將從文件中讀取IP地址和用戶名,該文件將連接安裝到Windows上的共享,然后將ano文件類型復制到名為用戶名的新文件夾中。 目前還無法正常工作,如果找不到Windows共享,它將創建數百個名為* .ano的文件夾。

請幫助

文本文件:

192.168.0.2 user1
192.168.0.3 user2

bash腳本:

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

一個問題是您將通配符( * )用於目標文件。 但是這些文件不存在-因此/home/user/Documents/$USERNAME/*.ano無法匹配,並且rsync將創建文件*.log

最好做:

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

問題出在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跳過文件中任何可能的空白行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM