如何使用 BASH 脚本重命名 SFTP 中的多个文件

如何使用 BASH 脚本重命名 SFTP 中的多个文件

我是 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

相关内容