rsync 试运行统计中的绝对路径

rsync 试运行统计中的绝对路径

rsync我已执行以下命令,以便获取执行后将传输到远程服务器的文件列表:

rsync -avzm --stats --safe-links --ignore-existing --dry-run --human-readable /tmp/test REMOTE-HOST:/tmp/data/ >> /tmp/transfer.log

为了仅获取文件列表(均为 PDF),我执行了以下命令:

grep 'pdf$' transfer.log > files.txt

我看不到文件的绝对路径:

test/2103/0E/210321449902_NR_1/210321449902-1-A4-NB.pdf
test/2103/0E/210321481320_NR_1/210321481320.AKPML.pdf
test/2103/0E/210321779915_NR_1/210321779915-1-A4-NB.pdf
test/2103/0E/210321959975_NR_1/210321959975-01-A4-NB.pdf

rsync执行空运行时应使用什么选项才能获取文件的绝对路径?

我需要使用该文件列表,以便我可以使用 GNUcat列出文件并执行多个文件。 (如rsyncparallel问题)

答案1

路径是相对于源(和目的地)报告的。在您的情况下,指定的源根目录是/tmp/test,因此示例文件集需要在前面加上此前缀才能生成完整路径。然而,事情并不是那么简单,因为您应该结束源树,/以便其内容直接到达目标。正如您所看到的,实际的前缀只是/tmp而不是/tmp/test,并且test包含在复制的文件中。所以...

您可以使用sed其他合适的工具来执行此操作:

sed -n '/pdf$/s!^!/tmp/!p' transfer.log > files.txt
#                 ^^^^^ the transfer prefix

cat files.txt
/tmp/test/2103/0E/210321449902_NR_1/210321449902-1-A4-NB.pdf
/tmp/test/2103/0E/210321481320_NR_1/210321481320.AKPML.pdf
/tmp/test/2103/0E/210321779915_NR_1/210321779915-1-A4-NB.pdf
/tmp/test/2103/0E/210321959975_NR_1/210321959975-01-A4-NB.pdf

答案2

您可以使用--out-format选项指定任何格式。

对于您的情况,只需添加--out-format='/%f%L'到您的命令:

rsync -avzm --stats --safe-links --ignore-existing --dry-run --human-readable --out-format='/%f%L' /tmp/test REMOTE-HOST:/tmp/data/ >> /tmp/transfer.log

相关内容