0

我在创建 shell 脚本方面很陌生。

我正在开发一个 shell 脚本,它每天只备份一次我的文件。我需要检查 *.war 文件在三个不同的文件夹中(输入文件夹、生产文件夹、备份文件夹)

如果三个目录中存在相同的文件,则不进行备份。如果没有,则必须将文件夹 2 中的文件移动到文件夹 3。

这是我到目前为止所做的。

================================

TODAY=$(date +%d-%m-%Y)
INPUT=/home/bruno.ogasawara/entrada/
BACKUP=/home/bruno.ogasawara/backup/
PROD=/home/bruno.ogasawara/producao/
DIR1=$(ls $INPUT)
DIR2=$(ls $PROD)
DIR3=$(ls $BACKUP$TODAY)

for i in $DIR1; do
    for j in $DIR2; do
        for k in $DIR3; do
                if [ $i == $j ] && [ $j == $k ]; then
                          exit 1; else
                          mv -f $PROD$j $BACKUP$TODAY
                fi
        done
    done
done

mv -f $INPUT*.war $PROD

================================

验证不起作用。最后唯一起作用的是 mv -f $INPUT*.war $PROD 。我在哪里遗漏了什么或做错了什么?

提前感谢人们。

4

1 回答 1

0

我的理解是你想同步这三个文件夹。

在这种情况下,您不应该修改文件名,因为我们使用文件名来比较它们。否则您应该使用 md5 或 sha 校验和。但是 linux 文件系统已经具有时间戳功能,您不必将日期附加到文件名。

在您的代码中,您使用 ls 列出文件......但实际上 ls 命令以列模式列出文件,这与 bash 中的 for 循环不兼容。
正确的命令是

查找 $DIR -maxdepth 1 -type f -exec basename {} \;

您想将 *.war 文件同步到所有文件夹...然后您可以使用它:

#!/bin/bash
DIR1=/home/bruno.ogasawara/entrada/
DIR2=/home/bruno.ogasawara/backup/
DIR3=/home/bruno.ogasawara/producao/

cp -n $DIR1/*.war $DIR2
cp -n $DIR1/*.war $DIR3
cp -n $DIR2/*.war $DIR1
cp -n $DIR2/*.war $DIR3
cp -n $DIR3/*.war $DIR1
cp -n $DIR3/*.war $DIR2

-n:将检查文件是否已经存在。它不会覆盖现有文件。

于 2019-02-09T06:37:19.257 回答