我的目标是使用scp仅将所有文件从~/local_dir复制到user@host.com /var/www/html/target_dir并且不在 local_dir 中创建 local_dir 类别。
/var/www/html/target_dir/files..
Run Code Online (Sandbox Code Playgroud)
但不是
/var/www/html/target_dir/local_dir/files.. 使用 -r 参数时
par*_*zyd 166
scp 有 -r 参数。所以,尝试使用:
$ scp -r ~/local_dir user@host.com:/var/www/html/target_dir
Run Code Online (Sandbox Code Playgroud)
-r 参数就像 cp 中的 -r 参数一样,它将传输您的整个文件夹以及其中的所有文件和子目录。
tac*_*omi 39
如果您的目标是从通配符传输所有文件,local_dir则*可以:
$ scp ~/local_dir/* user@host.com:/var/www/html/target_dir
Run Code Online (Sandbox Code Playgroud)
该-r选项表示“递归”,因此当您尝试传输整个目录或多个目录时必须编写它。
来自man scp:
-r
Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.
Run Code Online (Sandbox Code Playgroud)
所以如果你在里面有子目录local_dir,最后一个例子只会传输文件,但是如果你设置了这个-r选项,它将传输文件和目录。
rap*_*sse 24
附加/.到您的源目录将传输其内容而不是目录本身。与通配符解决方案相反,这也将包括任何隐藏文件。
$ scp -r ~/local_dir/. user@host.com:/var/www/html/target_dir
Run Code Online (Sandbox Code Playgroud)
此解决方案的功劳归功于 roaima,但我认为它应该作为实际答案发布,而不仅仅是评论。
小智 10
按着这些次序:
复制目录local_dir及其所有子目录:
scp -r ~/local_dir user@host.com /var/www/html/target_dir
Run Code Online (Sandbox Code Playgroud)只复制local_dir目录的内容而不是目录local_dir本身:
scp -r ~/local_dir/* user@host.com /var/www/html/target_dir
Run Code Online (Sandbox Code Playgroud)不要使用:scp -r ~/local_dir/. user@host.com /var/www/html/target_dir因为它会引发错误(刚刚测试并收到以下错误):
scp: error: unexpected filename: .
Run Code Online (Sandbox Code Playgroud)