我正在寻找一种简短的简单方法来检查远程路径是否指向目录(或符号链接目录)或可读文件。
如果它是一个目录,那么我可以scp
从该目录内部将多个特定文件传输到我的本地系统,而如果它是一个文件,我只能使用scp
该文件。
我以 -方式给出的文件路径scp
为user@host:/path/to/dir-or-file
.
注意:在本地系统(Windows 上的 MobaXterm)上,我有bash
和可用,scp
而ssh
远程系统(我想检查路径所在的位置)是一个完整的 Linux 发行版。
答案1
您正在寻找传输文件(如果它是文件)或目录的一部分(如果它是目录)。
if ! scp user@host:/path/to/dir-or-file local/path
then
scp user@host:/path/to/dir-or-file/some-specific-file local/path
fi
如果scp
被告知传输一个没有选项的目录-r
,它将失败。您可以使用它来检测远程主机上的给定路径是否是目录,然后如果第一次无法将路径名作为文件获取,scp
则第二次调用以获取目录内的特定文件。scp
当然,如果你想转移所有的目录(如果它是一个目录)你可以这样做
scp -r user@host:/path/to/dir-or-file local/path
无论路径是目录还是文件,它都可以工作。
答案2
您可以运行以下命令:
ssh user@host file /path/to/dir-or-file
结果将是可能的文件类型:
/path/to/dir-or-file: directory
/path/to/dir-or-file: symbolic link to `whatever'
/path/to/dir-or-file: UTF-8 Unicode text
/path/to/dir-or-file: ELF 64-bit LSB executable ...
....
笔记:如果您只需要测试目录或不在 bash shell 脚本中,您只需使用如下测试:
ssh user@host test -d /path/to/dir-or-file
if [ $? -eq 0 ]; then
echo this is a dir
else
echo this is not a dir
fi
答案3
如果您不介意错误消息并且只需要复制非点文件,那么一种快速而肮脏的方法是:
scp -p asuser@host:'/path/to/dir-or-file/*' asuser@host:'/path/to/dir-or-file' .
尾随点将远程文件复制到当前目录。调整口味。该-p
标志保留时间戳和权限。如果不需要这些,请省略。
答案4
此信息也可在 ls 的输出中找到:第一列中的第一个符号是:“d”表示目录“l”表示链接