如何在 debian 中像 Microsoft 的“Robocopy”那样复制文件?

如何在 debian 中像 Microsoft 的“Robocopy”那样复制文件?

在跳转到我的媒体中心之前,我一直在尝试将小部分从我的媒体/下载中心从 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 中进行了测试:)

相关内容