创建硬链接而不是使用 rsync 复制文件

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.psfoo.pdf

find . -iname \*foo\*pdf -exec rsync -R --exclude='*bar*' {} ~/path/to/dir/ \;
Run Code Online (Sandbox Code Playgroud)

这个命令相当于什么,这样我最终得到的是硬链接而不是副本?

JoL*_*JoL 6

由于没有其他人这样做,为了回答标题问题,您可以使用--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是相对于目标目录,而不是当前目录。