Почему rsync добавляет дополнительный каталог?

Создайте функцию

report () {
    if [ $1 -eq 0 ]; then
        echo "$2"
    else
        echo "Command failed"
    fi

}

VAR1=$(aws ec2 create-vpc --query "Vpc.VpcId" --output text)

report $? "$VAR1"

VAR2=$(aws ec2 create-subnet --query "Subnet.SubnetId" --output text)

report $? "$VAR2"

Кажется, вы также можете создать функцию для aws ec2.

0
07.05.2019, 18:36
3 ответа
rsync -rv /home/myname/mydir1/* myhost:/home/myname/mydir1

будет копировать файлы только в mydir1 (и подкаталоги)

rsync -rv /home/myname/mydir1 myhost:/home/myname/mydir1

скопирует сам каталог, поэтому вы получите mydir1/mydir1

    francois@zaphod:~/tmp$ rm -rf b
    francois@zaphod:~/tmp$ mkdir b
    francois@zaphod:~/tmp$ rsync -rv a/* b
    sending incremental file list
    a

    sent 80 bytes  received 35 bytes  230.00 bytes/sec
    total size is 0  speedup is 0.00
    francois@zaphod:~/tmp$ tree b
    b
    └── a

    0 directories, 1 file


 francois@zaphod:~/tmp$ rm -rf b
    francois@zaphod:~/tmp$ rsync -rv a b
    sending incremental file list
    created directory b
    a/
    a/a

    sent 108 bytes  received 63 bytes  342.00 bytes/sec
    total size is 0  speedup is 0.00
    francois@zaphod:~/tmp$ tree b
    b
    └── a
        └── a

    1 directory, 1 file
1
28.01.2020, 02:18

Это редкий случай, когда отставание /важно. Во многих командах указание fooи foo/идентично. Но у него есть семантическая разница. В некоторых командах, включая rsync, замыкающий /указывает команде выполнить особое действие, основанное на том факте, что это каталог. Если у вас возникла ситуация, созданная...

mkdir foo bar
touch foo/baz

... и вы хотите скопировать содержимое из foo в bar, тогда НЕ указывайте...

rsync -rv foo bar

... вместо этого укажите...

rsync -rv foo/ bar

В противном случае rsync решит, что вы хотите скопировать все дерево (, включая родительский каталог ), в целевой каталог, как вы нашли.


Другим примером с подобной эффективной семантикой является lsпри перечислении ссылок:

mkdir foo
touch foo/baz
ln -s foo bar

ls -l bar
lrwxrwxrwx 1 philip philip 3 May  7 14:58 bar -> foo

ls -l bar/
total 0
-rw-r----- 1 philip philip 0 May  7 14:58 baz
1
28.01.2020, 02:18

См. примеры в разделе «Использование» справочной страницы rsync

Вы можете использовать

rsync -rv /home/myname/mydir1 myhost:/home/myname

или

rsync -rv /home/myname/mydir1/ myhost:/home/myname/mydir1
2
28.01.2020, 02:18

Теги

Похожие вопросы