在跳转到我的媒体中心之前,我一直在尝试将小部分从我的媒体/下载中心从 Windows 迁移到 Linux。现在我已经设置了一个带有 raspbian 的 Raspberry pi,在移动之前我将在其中尝试不同的东西。
现在我的媒体中心正在下载某些文件,需要将其从一个目录复制到另一个目录。我可以使用最基本的 Linux 命令来完成这部分,但真正的问题在于复制时对这些文件的处理。
在Windows中,我有一个定期运行的批处理脚本,其中: -将文件从“a”复制到“b”,并创建一个日志文件。 -a 程序监视文件夹“b”移动并重命名文件 -日志文件可防止脚本再次复制相同的文件,从而防止我的媒体文件夹中出现重复文件。
代码如下:
ROBOCOPY "location A" "Location B" /NP /M /S /LOG+:c:\batches\Rename.log
这可以在 Linux 中完成吗?如果可以的话如何实现?
答案1
rsync 非常适合这类事情,您不需要进行任何重命名或任何操作,它只会复制新的或更新的内容。它有很多选项可以根据您的要求更改行为。
例如:
rsync -av /location/a/* /location/b
答案2
在 Linux 中你可以做任何事情!
您可以使用 crond 编写一个进程来定期执行,并使用 bash 脚本来复制文件。
假设您创建两个目录:
pi@raspberrypi2 ~ $ mkdir tmp
pi@raspberrypi2 ~ $ cd tmp/
pi@raspberrypi2 ~/tmp $ mkdir 1;mkdir 2
然后将文件放在目录1中:
pi@raspberrypi2 ~/tmp $ touch 1/file1
然后您创建脚本,如下所示:
ej。简单的 bash 脚本:
#!/bin/bash
for i in $(ls 1/);do
if [ -e 2/$i ];then
echo "File already copied to directory 2" >> logfile.log
else
cp 1/$i 2/$i
if [ $? = 0 ];then
echo "File $i copied to directory 2" >> logfile.log
else
echo "Error copying file $i to directory 2" >> logfile.log
fi
fi
done
它将文件从目录 1 复制到目录 2。并且还使用 echo 命令将消息写入日志文件。
测试:
pi@raspberrypi2 ~/tmp $ ls 1/ 2/
1/:
file1
2/:
pi@raspberrypi2 ~/tmp $ bash script.sh
pi@raspberrypi2 ~/tmp $ ls 2/
file1
pi@raspberrypi2 ~/tmp $ cat logfile.log
File file1 copied to directory 2
pi@raspberrypi2 ~/tmp $ bash script.sh
pi@raspberrypi2 ~/tmp $ ls 2/
file1
pi@raspberrypi2 ~/tmp $ cat logfile.log
File file1 copied to directory 2
File already copied to directory 2
pi@raspberrypi2 ~/tmp $
然后你可以在 crontab 中插入一个 cronjob 来定期运行脚本:
pi@raspberrypi2 ~/tmp $ crontab -e
# run the script at at 5 a.m every day:
0 5 * * * bash /home/pi/tmp/script.sh
保存文件并检查 cronjob 是否已安装:
pi@raspberrypi2 ~/tmp $ crontab -l
0 5 * * 1 bash /home/pi/tmp/script.sh
您可以随意编写脚本,该示例是一个起点。
注意:在 Raspberry Pi A+ 中的 Raspbian runnin 中进行了测试:)