**
**先决条件:源和目标应具有相同的目录名称。目录的深度级别可能会有所不同,而不是名称
关于源和目标结构的注释:
mydir
|__ sampleFolder/fil.txt
|__ Project1/fil2.txt
desDir
|__ some_path/More_path/sampleFolder/
|__ some_path/More_path/some_more_path/Project1/
目的:将文件夹中的文件复制mydir/sampleFolder/file.txt
到desDir/some_path/sampleFolder/file.txt
注意:路径层次结构不同,但sampleFolder
源路径和目标路径都相同
命令
find $HOME/mydir/ -type f -name *.txt -exec sh -c 'cp {}' 'find $HOME/des_dir -type d -path `echo $(dirname -- {}) | sed s"~$HOME/mydir~~g"`' sh {} \;
命令分解1:这将获得父目录并$HOME/mydir
从搜索到的*.txt
文件路径中删除
echo $(dirname -- {}) | sed s"~$HOME/mydir~~g"
命令分解2:将搜索执行命令分解1后收到的路径匹配字符串
find $HOME/des_dir -type d -path
命令分解3:这很常见(我猜)
find $HOME/mydir/ -type f -name *.txt -exec sh -c 'cp {}'
**
**问题1使用以下命令解决,并且如果我在cygwin中作为独立命令运行它,则可以正常工作
find $HOME/MY_DIR/ -type d -name data -exec sh -c 'rsync -avz {} `find $HOME/DES_DIR-type d -name $(basename $(dirname -- {}))`' sh {} \;
但是如果我在shell脚本中使用此命令并在cygwin中运行脚本,则会出现错误
protocol version mismatch - is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(60)
您要执行的操作有点模棱两可,但rsync
如果您打算复制整个目录,则可能会比较合适。
例如
$ rsync -avz level2 level3/test/
sending incremental file list
level2/
level2/out.txt
level2/rds.aws.test.lambda.json
sent 380 bytes received 58 bytes 876.00 bytes/sec
total size is 341 speedup is 0.78
$ ls level3/test/
level2
$ ls level3/test/level2/
out.txt rds.aws.test.lambda.json
如果只需要* .txt文件并保留目录结构,则需要R
向rsync添加选项
$ rsync -avzR level2/*.txt level3/test2
sending incremental file list
level2/
level2/out.txt
sent 178 bytes received 39 bytes 434.00 bytes/sec
total size is 65 speedup is 0.30
$ ls level3/test2/level2/
out.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句