Come faccio a diffondere ricorsivamente due direttori e ignorare le prime n righe di each file

Questa domanda è simile a Come differire solo la prima row di due file? , ma ricorsivamente. Vorrei differire due directory ma:

  • diff solo le prime righe N di each file nelle due directory
  • diff tutto tranne le prime righe N di each file nelle due directory

  • Perché il command "top" mostra un utilizzo CPU del 799%?
  • Rinomina ': 2f' su '-' nei nomi delle cartelle in Linux
  • C'è qualche modo per ridurre automaticamente il volume del subwoofer durante la notte?
  • Utilizza la configuration del disco a singola partizione
  • Sovrascrivere il DNS in modo peer-peer
  • Dove un sistema di file Linux dovrebbe mettere i media destinati a essere accessibili da tutti gli account utente?
  • Stesso path assoluto su linux e windows 7
  • Bootloader non può caricare Windows?
  • 2 Solutions collect form web for “Come faccio a diffondere ricorsivamente due direttori e ignorare le prime n righe di each file”

    Il mio primo suggerimento per te è utilizzare Meld . Funziona anche dalla row di command.

    Ha le seguenti caratteristiche che ti interessano:

    • Confronta due o tre directory file per file, mostrando nuovi file, mancanti e modificati.
    • Utilizza il filter di text incorporato di regex per ignorare le differenze non interessanti.

    L'unica cosa da fare è scoprire i templates regex corretti che possono essere usati per ignorare i dati non importnti (a seconda della syntax dei metadati che si desidera ignorare).

    Questi due loop usano diff -qr per fare un diff iniziale, principalmente per get facilmente i nomi dei file, quindi fare una differenza individuale nella coppia di file trovata. sed viene utilizzato per cancellare le prime righe N, o per mantenere solo le prime righe N. Prima di cancellare le righe N:

     N=2 diff -qr dir1 dir2 | grep '^Files.*differ' | while read xaxbx do diff --label "$a" --label "$b" -u <(sed "1,${N}s/.*//" <"$a") <(sed "1,${N}s/.*//" <"$b") done 

    E questo per mantenere N:

     diff -qr dir1 dir2 | grep '^Files.*differ' | while read xaxbx do diff --label "$a" --label "$b" -u <(sed -n "1,${N}p" <"$a") <(sed -n "1,${N}p" <"$b") done 

    Ciò non presuppone spazi / tabs nei nomi di file.

    Siamo il genio del computer e della rete.