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
列出文件并执行多个文件。 (如rsync
parallel
这问题)
答案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