shell - 有没有一种方法可以让我在另一台服务器上使用 shell 脚本访问、使用和操作来自一台服务器的文件>
问题描述
我尝试访问文件remote server "10.101.28.83"
并操作文件以在运行脚本的主机服务器上创建文件夹。但是echo "$(basename "$file")"*
命令的输出意味着文件不是从远程服务器读取的。
#!/bin/bash
#for file in /root/final_migrated_data/*; do
for file in root@10.101.28.83:/root/final_migrated_data/* ; do
echo "$(basename "$file")"
IN="$(basename "$file")"
IFS='_'
read -a addr <<< "$(basename "$file")"
# addr[0] is case_type, addr[1] is case_no, addr[2] is case_year
dir_path="/newdir1";
backup_date="${addr[0]}_${addr[1]}_${addr[2]}";
backup_dir="${dir_path}/${backup_date}";
mkdir -p "${backup_dir}";
cp /root/final_migrated_data/"${backup_date}"_* "${backup_dir}"
done
我希望echo "$(basename "$file")"的输出是远程服务器位置上存在的文件列表,/root/final_migrated_data/
但实际输出是*
.
解决方案
您可以使用sshfs。顾名思义,sshfs 允许在本地挂载(用于读取和写入)您可以通过 SSH 访问的远程文件系统。只要你已经了解 SSH,它的用法就非常简单:
# mount the distant directory on your local machine:
sshfs user@server.com:/my/directory /local/mountpoint
# manipulate the filesystem just like any other (cd, ls, mv, rm…)
# unmount:
umount /local/mountpoint
如果您需要经常挂载同一个远程文件系统,您甚至可以将其添加到您/etc/fstab
的 .
但是请注意,使用 SSH 文件系统很慢,因为文件系统上的每个操作都意味着通过网络获取或发送数据,而 sshfs 并没有针对此进行特别优化(例如,它不缓存文件内容)。存在其他解决方案,这些解决方案可能设置起来更复杂,但性能更好。
自己看看速度是否有问题。在您的情况下,如果您只是将文件从服务器中的一个位置复制到服务器中的另一个位置,那么让它通过您的家用计算机并再次返回似乎是相当荒谬的。直接在服务器上运行脚本可能更有利。
推荐阅读
- python - 运行代码后已安装的库丢失
- java - 使用 Spring Security 在 Spring 中进行 WebSocket 身份验证
- azure - Azure 逻辑应用 - GetEntities (Azure Table) 连接器筛选器返回错误结果
- asterisk - 如何在 VoiceMail Asterisk 11 中进行更改
- gcc - gfortran make 函数中的错误:无效选项——I
- python - 如何向 Airflow 2.0 添加新的“Conn 类型”?
- powershell - 保护 JEA(恰到好处的管理)
- python - 尝试从 pip 安装软件包时如何绕过 ReadTimeoutError?
- python - 如何在基于父模型的另一个模型中创建对象?
- java - 有没有办法停用 Java 应用程序和 mongo 数据库之间的连接,以查看运行时抛出了哪些异常?