shell脚本通过sftp命令删除文件夹里面所有文件
时间: 2024-10-17 18:15:04 浏览: 54
在Shell脚本中,你可以使用`sftp`命令配合通配符(`*`)来删除远程文件夹里的所有文件。以下是一个基本的示例,假设你已经配置了SSH key并且登录到了正确的服务器:
```bash
#!/bin/bash
# 定义SFTP连接信息,如用户名、主机名、远程目录路径
USER="username"
HOST="hostname"
REMOTE_DIR="/path/to/your/directory"
# 使用sftp命令删除远程文件夹内的所有文件
sftp -o "BatchMode=yes" $USER@$HOST << EOF
rm $REMOTE_DIR/*
EOF
# 确认命令是否执行成功,并添加错误处理
if [ $? -eq 0 ]; then
echo "所有文件已成功删除"
else
echo "删除文件失败,错误码:$?"
fi
```
在这个脚本中,`BatchMode=yes`选项用于禁用交互模式,使得`sftp`命令可以非交互式地执行。然后使用`=》 EOF`将接下来的命令传递给`sftp`,`rm $REMOTE_DIR/*`会删除指定目录下的所有文件。
相关问题
写一个shell脚本,使用sftp上传文件夹下面所有文件到服务器上
在Shell脚本中,你可以使用`sftp`命令配合通配符`*`来上传指定目录下的所有文件到远程服务器。以下是一个基本的示例,假设你想将当前目录下的`myfolder`文件夹及其内容上传到名为`username@server.com`的服务器的`/path/to/destination`路径:
```bash
#!/bin/bash
# 定义源路径、目标路径和用户名密码
src_dir="myfolder"
dest_path="/path/to/destination"
# 登录信息
remote_user="username"
remote_host="server.com"
remote_password="your_password" # 将实际密码替换这里
# 使用sftp上传文件
echo "Uploading $src_dir to $remote_host..."
sftp -o "StrictHostKeyChecking=no" "$remote_user@$remote_host" << EOF
cd "$dest_path"
put "$src_dir"/*
bye
EOF
# 检查是否成功上传
if [ $? -eq 0 ]; then
echo "Upload successful."
else
echo "Upload failed. Check the logs for more details."
fi
```
在这个脚本中,`-o StrictHostKeyChecking=no`是为了避免首次连接时询问主机密钥验证,如果安全级别较高,可以移除这条选项并手动处理。
保存此脚本为`upload_files.sh`,然后通过`chmod +x upload_files.sh`使其可执行,并运行`./upload_files.sh`来执行上传操作。
shell脚本将文件夹中新增的文件定时sftp到指定路径
可以使用shell脚本结合cron定时任务来实现定时sftp文件夹中新增的文件到指定路径。以下是一个简单的示例脚本:
```bash
#!/bin/bash
# 目标sftp服务器信息
HOST="sftp.example.com"
PORT=22
USERNAME="username"
PASSWORD="password"
DEST_FOLDER="/path/to/destination/folder"
# 待监控的本地文件夹
SOURCE_FOLDER="/path/to/source/folder"
# 获取最后一次监控的时间
LAST_RUN=$(cat /tmp/sftp_last_run)
if [ -z "$LAST_RUN" ]; then
LAST_RUN=0
fi
# 查找新增的文件
FILES=$(find $SOURCE_FOLDER -type f -newermt @$LAST_RUN)
# 上传新增的文件
for FILE in $FILES; do
echo "Uploading $FILE..."
sftp -P $PORT $USERNAME@$HOST:$DEST_FOLDER <<< "put $FILE"
done
# 保存最后一次监控的时间
date +%s > /tmp/sftp_last_run
```
将上述脚本保存为 `sftp.sh`,然后使用 `cron` 定时任务来定时执行该脚本即可。例如,将任务设置为每小时执行一次,可以将以下内容添加到 `crontab` 中:
```
0 * * * * /bin/bash /path/to/sftp.sh
```
注意,为了确保脚本正常运行,需要确保以下几点:
- 目标sftp服务器信息正确,并且能够通过用户名和密码进行认证。
- 待监控的本地文件夹存在,并且具有读取和执行权限。
- 目标文件夹在sftp服务器上存在,并且具有写入权限。
- cron服务已经启动,并且能够正常执行定时任务。
阅读全文