我是 shell 脚本的新手。我正在尝试在 SFTP 中使用通配符重命名多个文件。
请为我提供一些解决方案。或者提出一些想法
我的 sh 脚本:
sftp $userName@$hostName <<EOF
lcd $downloadPath
cd $rootpath
rename *.txt $rootpath/*.txt
exit
EOF
为此我收到以下错误:
couldnt rename : no such file directory
答案1
客户sftp
端相当基础,不会执行循环或替换变量。你必须
- 发出第一个 SFTP 命令,执行
ls
目录的操作,并捕获其输出 - 处理输出以生成每个文件的重命名命令列表
- 发出第二个 SFTP 命令并执行重命名命令列表
总而言之,替代方案可能更简单。
答案2
以下脚本用于 FTP 命令。您可以对其进行修改以与 SFTP 配合使用。
概念是生成一个 todo 文件来逐个重命名(移动)每个文件。
完整脚本可实现移动多个文件
1. 使用 mls 命令从 ftp 服务器获取文件列表
2. 生成待办事项列表文件
2.1 获取文件
2.2 重命名(移动文件)
3. 使用待办事项列表文件执行 ftp 命令
#!/bin/sh
clear
# change local directory
cd [local-directory]
#collect file names
ftp -ni ftp.abccompany.com <<EOF
user [user] [password]
cd /OUT
mls abc*.* list.txt
quit
EOF
# create ftp action list
echo >>todo.lst user [user] [password]
while read N
do
echo >>todo.lst cd /OUT
echo >>todo.lst get $N
echo >>todo.lst rename $N ARCHIVE/$N
done <list.txt
echo >>todo.lst quit
# ftp transfer process
ftp -nv ftp.abccompany.com <todo.lst
# cleanup
rm todo.lst