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

  • Come ripristinare Bash su Mac OSX, il file.bash_profile è danneggiato e bash non funziona più
  • Imansible convertire PDF in image, a causa dell'errore "non definito"
  • È dispendioso call il gatto?
  • / usr / bin / reset disabilita il backspace
  • Un lavoro inserito in background continua a funzionare dopo la chiusura di una session SSH?
  • Completamento della scheda per argomenti di command non riuscito in Cygwin a causa dell'estensione ".exe"
  • 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.