查找和rsync?

mkr*_*use 30 shell bash pipe find rsync

我希望能够搜索超过 14 天和超过 10k 的文件,然后将那些找到的文件 rsync 到目的地。

有没有办法组合这两个命令?

find ./ -mtime +14 -size +10k 
rsync --remove-sent-files -avz /src /dest
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 44

您可以使用下面列出的选项之一将 find 的输出发送到 rsync。

方法#1

这两个选项非常相似,它们都假设您将目录更改到某个位置,然后find从那里运行命令。

$ rsync -avz --remove-sent-files \
        --files-from=<(find ./ -mtime +14 -size +10k) ./ /dest
Run Code Online (Sandbox Code Playgroud)

您还可以使用管道将列表输入:

$ find ./ -mtime +14 -size +10k -print0 \
        | rsync -av --files-from=- --from0 ./ /dest
Run Code Online (Sandbox Code Playgroud)

方法#2

这个方法可以从任何地方运行。

$ find /src/dir/ -mtime +14 -size +10k -printf %P\\0 \
        | rsync -av --files-from=- --from0 /src/dir/ /dst/dir/
Run Code Online (Sandbox Code Playgroud)
  • printf %P: 文件名和命令行参数的名称,在该文件名下被删除。这样,您可以使用任何 src 目录,无需先 cd 进入您的 src 目录。

参考