所以我在我的远程文件服务器(在另一种状态)上做了一个递归 scp,它在我的远程 Web 目录上创建了一个无限循环的链接......
http://www.linuxquestions.org/questions/linux-general-1/recursive-scp-wo-following-links-658857/说我可以尝试创建一个巨大的 tar 文件。但这有一个问题 - 我在办公室的 Linux 机器上运行递归 scp,并将所有文件复制到我的外部硬盘驱动器上,该硬盘驱动器采用 FAT32 格式(因为我需要一些可以由UNIX 和 Windows)。 FAT32 不支持大文件大小。所以我必须尝试一些不同的东西。
还有一个 rsync 选项,但我办公室的 Linux 机器非常原始(igel),所以它没有 rsync...
答案1
我不建议scp
直接使用它来传输大文件树,因为它不能正确处理硬链接或软链接,而且流也没有被压缩。
我建议cpio
即时(解)压缩:
ssh user@host "cd /path/to/files && find . | cpio -ov | bzip2 -c" | bunzip2 -c | cpio -ivd
此外,find
还可以处理其他条件,例如“文件必须小于 4G”
find . -size -4G | ...
为了使cpio
空间更加友好(正确处理文件名中的空格)使用
find . -print0 | cpio -0 -ivd | ...
答案2
另一种选择是使用sftp -r
assftp
手册说:
上传和下载时递归复制整个目录。请注意,sftp 不遵循树遍历中遇到的符号链接。
所以
sftp -r source@surce_server.com:/source/dir .
正是你想做的事。
答案3
您无需在发送之前创建 tar 文件。您可以即时制作:
cd /source/dir
tar -cf - . | ssh 'cd /destination/directory && tar -xf -'
这确实要求远程服务器接受 ssh shell 连接,而不仅仅是 scp 连接。理论上,可以将任意文件树发送到与本地文件结构之类的任何内容都不对应的远程端,但我不知道有任何现有工具可以执行此操作。
如果符号链接是一个问题,您可以制作一个不包含符号链接并且占用的空间可以忽略不计的目录树的副本,假设源树位于支持硬链接的文件系统上(因此任何本机unix文件系统,或NTFS,但不是 FAT)。我在这里假设 GNU 实用程序:
cd /source/dir
mkdir ../regular-files-only
cp -al . ../regular-files-only
find ../regular-file-only \! -type f \! -type d -delete
您还可以使用 sftp。sftp -r
不遵循符号链接,与scp -r
.