使用bash脚本来检查一个文件是否多次附加到另一个文件的最佳方法是什么?我需要这样做,而无需安装额外的工具。我通过向其添加另一个文件来定期更新文件,并希望确保以前没有发生过该操作。
我尝试过各种差异和wc解决方案,但无法找到解决方案。
答案 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