防止多个附加到文件

时间:2014-01-28 04:57:29

标签: bash file append

使用bash脚本来检查一个文件是否多次附加到另一个文件的最佳方法是什么?我需要这样做,而无需安装额外的工具。我通过向其添加另一个文件来定期更新文件,并希望确保以前没有发生过该操作。

我尝试过各种差异和wc解决方案,但无法找到解决方案。

1 个答案:

答案 0 :(得分:3)

正如mklement0所建议的,一个解决方案可能是diff目标文件中包含源文件的最后一行,与源文件中的行数一样多。这是一幅草图:

#!/bin/bash
# USAGE: append_uniq.sh target source
# append source to target only if last part of target != source

target_file=$1
source_file=$2
source_num_lines=$(wc -l < "$source_file")
diff_target_lines=$(tail -n $source_num_lines "$target_file")

if ! diff "$source_file" <(echo "$diff_target_lines") > /dev/null; then
    echo "Appending $source_file to $target_file"
    cat "$source_file" >> "$target_file"
else
    echo "Already appended, skipping"
fi

奖金:单行

将文件a附加到文件lines,除非a已经上次附加到lines。两个文件都必须存在:

! diff -q a <(tail -n $(wc -l < a) lines) && cat a >> lines