由于 mynfs
是一种win
服务器,它不能包含:
. 我想将多个文件从源服务器复制到nfs
另一台服务器上的目录并同时重命名它们。
脚本如下所示:
#!/bin/bash
in_files="node1:~/experiment/wrfout_d01_2012-12-01*"
###########################################################
# the files look like wrfout_d01_2012-12-01_00:00:00
# wrfout_d01_2012-12-01_06:00:00
# wrfout_d01_2012-12-01_12:00:00
# wrfout_d01_2012-12-01_18:00:00
###################################
for fn in $in_files;do
echo $fn
newfn=$(basename "$fn")
echo 'apply basename :'
echo $newfn
scp -r "$fn" "./${newfn//:/_}"
echo 'next:'
done
运行此脚本后,它报告
node1:~/experiment/wrfout_d01_2012-12-01*
apply basename :
wrfout_d01_2012-12-01_12_00_00
./wrfout_d01_2012-12-01*: File name too long
./wrfout_d01_2012-12-01*: File name too long
./wrfout_d01_2012-12-01*: File name too long
./wrfout_d01_2012-12-01*: File name too long
next:
但似乎如果我只将脚本应用于一个文件,就可以了,(即更改in_files
为某个文件),例如:
node1:~/experiment/wrfout_d01_2012-12-01_00:00:00
apply basename :
wrfout_d01_2012-12-01_00:00:00
wrfout_d01_2012-12-01_00:00:00 100% 71MB 70.5MB/s 00:00
next:
1.那么我应该怎么做才能让它适用于多个文件?
2.顺便说一句,rsync
这部分似乎也可以做,哪个更快或首选。
您的目标文件在另一个系统上。因此,您的 glob (
node1:~/experiment/wrfout_d01_2012-12-01*
) 永远不会扩展。您可以在发布的输出中看到这一点。第一行输出来自echo $fn
并打印:您不会迭代匹配该 glob 的任何文件,您只是将 glob 本身作为字符串处理。因此,与其尝试列出您还无权访问的文件(您需要打开 ssh 连接以查看文件列表),不如将所有内容都带过来并在本地重命名:
或者,假设您的文件名不包含换行符,您可以这样做: