当文件存在时,scp“没有这样的文件”?

当文件存在时,scp“没有这样的文件”?

我正在尝试将文件夹从本地计算机复制到远程服务器,但似乎只能捕获文件夹中一半的文件。这是我的 scp 命令:

scp read_tree [email protected]:~/Work/gmovie

这是我得到的输出:

.DS_Store                                                    100% 6148     6.0KB/s   00:00    
read_tree/check_syscalls.c: No such file or directory
read_tree/check_syscalls.h: No such file or directory
example.c                                                    100%  204     0.2KB/s   00:00    
Makefile                                                     100%  438     0.4KB/s   00:00    
read_tree.c                                                  100% 9350     9.1KB/s   00:00    
read_tree.h                                                  100% 1176     1.2KB/s   00:00    
read_tree/stringparse.c: No such file or directory
read_tree/stringparse.h: No such file or directory
read_tree/strtonum.c: No such file or directory
zacc.c                                                       100%  885     0.9KB/s   00:00    

我也尝试直接对一个文件使用 scp,结果相同。您知道我哪里做错了吗?

**我正在我的 Mac 终端上工作

**编辑:ls -al 用于 read_tree 目录:

total 112
drwxr-xr-x@  13 name  staff   442 Jul 11 10:42 .
drwx------+ 109 name  staff  3706 Jul 11 10:42 ..
-rw-r--r--@   1 name  staff  6148 Jul 11 11:16 .DS_Store
-rw-r--r--@   1 name  staff   438 Jul 11 09:58 Makefile
lrwxr-xr-x@   1 name  staff    23 Jul 11 09:58 check_syscalls.c -> ../src/check_syscalls.c
lrwxr-xr-x@   1 name  staff    23 Jul 11 09:58 check_syscalls.h -> ../src/check_syscalls.h
-rw-r--r--@   1 name  staff   204 Jul 11 09:58 example.c
-rw-r--r--@   1 name  staff  9350 Jul 11 09:58 read_tree.c
-rw-r--r--@   1 name  staff  1176 Jul 11 09:58 read_tree.h
lrwxr-xr-x@   1 name  staff    20 Jul 11 09:58 stringparse.c -> ../src/stringparse.c
lrwxr-xr-x@   1 name  staff    20 Jul 11 09:58 stringparse.h -> ../src/stringparse.h
lrwxr-xr-x@   1 name  staff    17 Jul 11 09:58 strtonum.c -> ../src/strtonum.c
-rw-r--r--@   1 name  staff   885 Jul 11 09:58 zacc.c

答案1

看起来 Mac 上的 scp 不遵循符号链接,并且您的符号链接文件是导致问题的原因。

许多可能的选择中的两个是:
0. 使用-rscp 选项(手册页说它遵循符号链接)。1
. 将文件打包成一个包,然后通过 scp 发送这个单个文件。2
. 复制文件夹(取消引用符号链接)并将这个新文件夹 scp 起来。

0)递归 SCP 选项

scp 的手册页内容如下:

-r      Recursively copy entire directories.  Note that scp follows symbolic links encountered in the tree traversal.

因此,我期望以下措施能够发挥作用:

scp -r read_tree <destination>

(但是,我还没有在 Mac 上测试过,但它确实可以在 GNU/Linux 系统上运行。)

1)Tarball 选项

使用 打包文件夹tar -h,然后发送一个生成的文件。

tar czhf read_tree.tgz read_tree
scp read_tree.tgz <destination>

现在,您可以通过 ssh 进入远程服务器并解压文件:

ssh <destination>
cd ~/Work/gmovie
tar xvf read_tree.tgz

2)复制文件夹取消引用符号链接

复制原始文件夹,但要确保取消引用符号链接以复制原始文件。这可以使用以下方法实现cp -L

cp -rLf read_tree read_tree_nosymlinks

现在 scp 新文件夹:

scp -r read_tree_nosymlinks <destination>

相关内容