Jul*_*lia 4 command-line find rsync
以下命令递归地查找包含foo
(但不包含bar
)的所有文件,并保留目标目录中的目录结构,例如,如果我有/path/to/2017/foo.ps
,它会在包含resp 的目录下/path/to/2018/foo.pdf
创建子目录2017
和。。2018
~/path/to/dir/
foo.ps
foo.pdf
find . -iname \*foo\*pdf -exec rsync -R --exclude='*bar*' {} ~/path/to/dir/ \;
Run Code Online (Sandbox Code Playgroud)
这个命令相当于什么,这样我最终得到的是硬链接而不是副本?
由于没有其他人这样做,为了回答标题问题,您可以使用--link-dest
. 一般来说,如果您想使用rsyncs/
同步d/
但使用硬链接而不是副本,您可以执行以下操作:
rsync -r --link-dest="$PWD/s/" s/ d/
Run Code Online (Sandbox Code Playgroud)
根据您的具体需求,您想要指定文件而不是整个目录,您可以执行以下操作:
find . \
-iname \*foo\*pdf \
-exec bash -c '
rsync -R \
--exclude="*bar*" \
--link-dest="$PWD/$(dirname "$1")" \
"$1" \
~/path/to/dir/
' sh {} \;
Run Code Online (Sandbox Code Playgroud)
这里之所以引入bash,是为了能够获取dirname
文件路径的。--link-dest
需要目录而不是文件本身。我也使用$PWD
因为--link-dest
是相对于目标目录,而不是当前目录。