0

Windowsでその共有への接続をマウントし、ユーザー名と呼ばれる新しいフォルダーにファイルタイプをコピーするファイルからIPアドレスとユーザー名を読み取るbashスクリプトを作成しようとすると、問題が発生します。Windows 共有が見つからない場合、*.ano という名前の何百ものフォルダーが作成されます。

助けてください

テキストファイル:

192.168.0.2 user1
192.168.0.3 user2

バッシュスクリプト:

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
4

2 に答える 2

0

*問題の 1 つは、宛先ファイルにワイルドカード ( ) を使用することです。しかし、それらのファイルは存在しません。したがって、/home/user/Documents/$USERNAME/*.ano一致させることができず、rsync はファイルを作成します*.log

より良い:

rsync -va /home/user/$USERNAME/*.ano /home/user/Documents/$USERNAME/
于 2011-04-21T08:24:19.970 に答える
0

問題は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ファイル内の可能性のある空白行をスキップするように追加することをお勧めします。

于 2011-04-21T08:59:56.830 に答える