我运行了一个scp
命令从 SSH 服务器下载一些文件。我没有使用.
将其放入当前文件夹,而是意外地输入了*
。看起来 scp 复制了文件并将它们放在某个地方。我的命令与此类似:
$moshe> scp [email protected]:~/SomeDirectory/SubDir/* *
我本想输入类似这样的内容:
$moshe> scp [email protected]:~/SomeDirectory/SubDir/* .
他们会在哪里?
答案1
您的 shell 会将 扩展*
到当前目录中的所有文件。scp
需要多个源文件和一个目标路径(与 相同cp
),因此它将复制[email protected]:~/SomeDirectory/Subdir/*
当前目录中除最后一个文件之外的所有文件到最后一个文件。因此,假设当前目录中的文件列表没有更改,请检查最后列出的是哪个目录:
$ ls | tail -1
答案2
它将它们放在当前目录的一个子目录中。
例如,如果您当前的目录类似于:
[andcoz@...] ~/test> ls -F
e f r s v w Z/
请注意,Z 是一个目录。当你写:
scp [email protected]:~/SomeDirectory/SubDir/* *
shell 扩展会将您的命令转换为以下形式:
scp [email protected]:~/SomeDirectory/SubDir/* e f r s v w Z
因此,来自远程计算机的所有文件和所有本地目录文件都将复制到Z
目录中。
答案3
如果当前目录下没有文件,则scp
依次将所有远程文件复制到名为*
.换句话说,该文件./*
现在包含按字母顺序排列的最后一个远程文件。如果任何远程文件是目录,则scp
显示错误消息但继续复制。
如果当前目录下只有一个常规文件,则将scp
所有远程文件依次复制到该文件中。
如果当前目录中至少有两个条目,则发生的情况取决于按字母顺序排列的最后一个条目的文件类型(如果运行,则为列表中的最后一个元素ls
)。
- 如果它是常规文件,
scp
则会中止并显示错误“不是目录”。 - 如果它是一个目录,
scp
则将所有远程文件和当前目录中除最后一个条目之外的所有文件复制到该目录中。
我建议安装远程目录sshfs或使用rsync -av
or rsync -auv
(不带通配符)复制文件。scp
有时可能容易出错。
¹名称以 . 开头的文件除外.
。