scp「no such file」ファイルが存在する場合?


3

ローカルコンピューターからリモートサーバーにフォルダーをコピーしようとしていますが、フォルダー内のファイルの半分しかキャッチしていないようです。これが私のscpコマンドです。

scp read_tree name@server.school.edu:~/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    

また、1つのファイルに対してscpを直接使用してみたところ、同じ結果が得られました。私が間違っている場所についてのアイデアはありますか?

** Macのターミナルで作業しています

**編集:read_treeディレクトリのls -al:

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

ls -alその「read_tree」ディレクトリでの出力を提供できますか?(そして、scpには-rこのディレクトリを再帰的にコピーするオプションが必要ですか?)
jehad

1
編集/更新をありがとう。私が疑ったように、scpの問題を引き起こすファイルはシンボリックリンクです。Scpはシンボリックリンクを追跡しません。これを修正するには、tarballを作成し(少数のファイルがあるようですので、問題ないはずです)、tarballをscpします。これを行う方法についての回答が必要ですか?
ジェハド

はい、私はプログラミングが初めてなので、tarballを作成する方法についての説明は素晴らしいでしょう!
ジュリア

上記のコメントに対する回答を提供しますが、(scpの最新のマンページを読んだだけで)答えはもっと簡単だと思います。おそらく最初のコメントでほのめかしたように、単に-rを使用します scp -r read_tree <destination>。scpのマンページには、再帰オプション(-r)がシンボリックリンクに従うと書かれています。
ジェハド

ありがとう!そして、read_treeフォルダー用の.tarファイルがあることを思い出したので、それを自分のサーバーにscpすることができました。今はすべて設定されています
ジュリア

回答:


3

Macのscpはシンボリックリンクをたどらないように見え、シンボリックリンクされたファイルが問題の原因になります。

多くの可能な選択肢の二つがある:
0使用-rSCPのオプション(manページは、それがシンボリックリンクをたどると言います)。
1.ファイルを1つのパッケージにtarballし、この単一のファイルを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、1つの結果ファイルを送信します。

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>

ゼロから始まる数字が好きですが、{0、1、2} "2つのオプション"を呼び出すのはちょっと変です。
カミルマシオロウスキ16

私のゼロ番目のオプションは単にscpを使用するデフォルトの方法でなければならないからです。代替オプションとしてカウントするのは間違っていると感じています。:-)
ジェハド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.