这个cron的mv指令有2个问题:1、假如/home/docker/ftpserver/data中没有新文件,不需要执行任何操作;2、假如目标文件已经存在,我要强制覆盖目标文件。帮我修正这两个问题。
时间: 2024-05-08 15:15:53 浏览: 16
可以将原来的mv命令修改为如下命令:
```bash
find /home/docker/ftpserver/data -type f -newermt "$(date +%Y-%m-%d)" -exec mv -f {} /home/docker/ftpserver/upload \;
```
解释:
1. 使用`find`命令查找`/home/docker/ftpserver/data`目录下所有普通文件(-type f)并且修改时间比今天新的文件(-newermt "$(date +%Y-%m-%d)")。
2. 对于每一个找到的文件,使用`-exec`执行`mv`命令将其移动到`/home/docker/ftpserver/upload`目录中。
3. 使用`-f`选项强制覆盖目标文件,即使目标文件已经存在。
这样就解决了两个问题。如果没有新文件,则不会执行任何操作;如果目标文件已经存在,则会强制覆盖目标文件。
相关问题
写一个scp脚本监测/home/d5000/sichuan/data/pms_message下是否有最新文件,如果有则将文件拷贝到msdbus1:/home/d5000/sichuan/cimsvg/out下,并输出日志
可以使用以下的SCP脚本来监测/home/d5000/sichuan/data/pms_message下是否有最新文件,并将其拷贝到msdbus1:/home/d5000/sichuan/cimsvg/out,并输出日志:
```
#!/bin/bash
# Set variables
SOURCE="/home/d5000/sichuan/data/pms_message"
DESTINATION="msdbus1:/home/d5000/sichuan/cimsvg/out"
LOGFILE="/var/log/scp.log"
# Check for latest file
LATEST_FILE=$(ls -rt $SOURCE | tail -n 1)
# If there's a new file, copy it to destination
if [ ! -z "$LATEST_FILE" ]; then
scp "$SOURCE/$LATEST_FILE" "$DESTINATION"
echo "$(date) - Copied $LATEST_FILE to $DESTINATION" >> $LOGFILE
else
echo "$(date) - No new files found in $SOURCE" >> $LOGFILE
fi
```
将以上代码保存为一个.sh文件,比如scp_script.sh,并将其赋予执行权限:
```
chmod +x scp_script.sh
```
然后可以将该脚本添加到cron任务中,以定期运行该脚本,比如每小时运行一次:
```
0 * * * * /path/to/scp_script.sh
```
这样,脚本就会定期检查/home/d5000/sichuan/data/pms_message下是否有最新文件,并将其拷贝到msdbus1:/home/d5000/sichuan/cimsvg/out,并输出日志。
linux创建一个计划任务,每天早上8:30备份/etc/fstab文件到/root目录。
可以使用cron来创建一个计划任务,每天早上8:30备份/etc/fstab文件到/root目录。以下是具体步骤:
1. 打开终端,使用以下命令编辑cron配置文件:
```
sudo crontab -e
```
2. 如果是第一次编辑cron文件,会提示选择默认编辑器,选择自己熟悉的编辑器即可。
3. 在打开的文件最后一行添加以下内容:
```
30 8 * * * cp /etc/fstab /root/
```
其中,`30 8`表示每天早上8:30,`* * *`表示每天都执行备份操作,`cp /etc/fstab /root/`表示将/etc/fstab文件备份到/root目录下。
4. 保存并退出文件。
以上就是创建一个计划任务,每天早上8:30备份/etc/fstab文件到/root目录的步骤。需要注意的是,cron命令的时间设置是基于系统的时区,因此需要根据自己所在的时区进行相应的调整。另外,备份操作会覆盖掉/root目录下原有的文件,因此需要谨慎操作。