Bash

如何為一系列文件生成差異?

  • July 2, 2015

我有一系列幾千個文件,所有文件名都是按順序排列的,比如說 file1.x、file2.x、file3.x 等。所有這些文件都在同一個目錄中。

我知道如何生成從 file1.x 到 file2.x 的差異,但是有沒有辦法可以編寫一個 bash 腳本來生成從一個文件到下一個文件的差異?基本上它會首先使差異從 1 到 2,然後從 2 到 3,然後從 3 到 4,等等,直到完成。

以下腳本接受一個參數 like"file*.x"並將其應用於find | sort獲取要處理的文件列表。對於數千個文件,您可能會得到“太多參數” echo file*.x

#!/bin/bash

prev=
find . -maxdepth 1 -type f -name "$1" | sort -V |
while read -r file; do
       file=${file#*/} # Remove leading ./
       if test -n "$prev"; then
               diff -u "$prev" "$file" > "${prev%.*}-${file%.*}.diff"
       fi
       prev="$file"
done

範例會話:

$ echo a > file1.x
$ echo b > file2.x
$ echo c > file3.x
$ echo d > file5.x
$ echo e > file10.x
$ ./script.sh "file*.x"
$ ls *.diff
file1-file2.diff  file2-file3.diff  file3-file5.diff  file5-file10.diff

引用自:https://unix.stackexchange.com/questions/213433