我尝试使用它rsync
来同步我的一些数据,但无法排除我想要的数据。这是我的目录树:
tst/
├── st1
│ ├── st11
│ │ └── txt.text
│ ├── st12
│ ├── st13
│ ├── st14
│ └── st15
├── st2
├── st3
├── st4
└── st5
我想排除目录st1
及其所有子目录和文件。
我尝试使用这个Linuxize教程没有运气,这些是我尝试过的命令:
rsync -auvzhe --exclude 'tst/st1/' --exclude 'tst/st1/*/' --exclude 'tst/st1' tst /home/yaodav/Desktop/shared_folder/BU/
rsync -auvzhe --exclude 'tst/st1/' --exclude 'tst/st1/*/' tst /home/yaodav/Desktop/shared_folder/BU/
我怎样才能获得不包括的副本st1
?
答案1
您几乎已经完成了,但一个微妙的错误让您措手不及。该-e
标志需要一个参数,表示连接到远程主机的命令。在您的例子中,没有远程主机,因此该参数从未使用过,甚至从未验证过。不幸的是,下一个参数是--exclude
,这意味着rsync
将您'tst/st1/'
视为要复制的目录树,而不是要排除的目录树。
场景(设置目录树和示例文件)
cd /tmp
mkdir -p tst/st1/st11 tst/st{2,3,4,5}
touch tst/st1/st11/txt.text
ls -R tst
复制除st1
目录及其内容之外的所有内容
rsync --dry-run -auv --exclude '/tst/st1/' tst /home/yaodav/Desktop/shared_folder/BU/
示例运行
sending incremental file list
created directory dst
tst/
tst/st2/
tst/st3/
tst/st4/
tst/st5/
sent 178 bytes received 62 bytes 480.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
--dry-run
当你看到它正在做你想要的事情时删除