2013-05-03 8 views
10

Voglio vedere le differenze di 2 file che non sono nel filesystem locale ma sul web. Quindi, penso che se si debba usare diff, curl e qualche tipo di piping.Come diffare due file dal web

Qualcosa di simile

curl http://to.my/file/one.js http://to.my/file.two.js | diff 

ma non funziona.

+0

Scriverli sul filesystem locale? :) – Ryan

+3

Che dire di 'diff <(curl oneweb) <(curl otherweb)'? – fedorqui

+0

@fedorqui perché non rispondere con questo? è corretto :) –

risposta

24

Lo strumento UNIX diff può confrontare due file. Se si utilizza l'espressione <(), è possibile confrontare l'output del comando all'interno dei indirections:

diff <(curl file1) <(curl file2) 

Quindi nel tuo caso, si può dire:

diff <(curl http://to.my/file/one.js) <(curl http://to.my/file.two.js) 
+6

Bello, vorrei aggiungere ** - s ** per rendere silenzioso il ricciolo e confrontare solo i contenuti, come: 'diff <(curl -s http://to.my/file/one.js) <(curl -s http://to.my/file.two.js)' – dsantaolalla

1

Alcune persone che arrivano a questa pagina potrebbe essere cercando un diffetto line-by-line piuttosto che un diff-code. Se è così, e con coreutils, è possibile utilizzare:

comm -23 <(curl http://to.my/file/one.js | sort) \ 
     <(curl http://to.my/file.two.js | sort) 

Per ottenere righe nel primo file che non sono nel secondo file. È possibile utilizzare comm -13 per ottenere le righe nel secondo file che non si trovano nel primo file.

Se non sei limitato a coreutils, si potrebbe anche usare sd (Flusso di diff), che non richiede l'ordinamento né sostituzione di processo e supporta i flussi infiniti, in questo modo:

curl http://to.my/file/one.js | sd 'curl http://to.my/file.two.js' 

Il fatto che supporta flussi infiniti per alcuni casi d'uso interessanti: potresti usarlo con un ricciolo all'interno di un ciclo while(true) (supponendo che la pagina ti dia solo risultati "nuovi"), e sd interromperà lo stream dopo un tempo specificato senza nuove linee in streaming .

Ecco un blogpost Ho scritto su flussi diffcativi sul terminale, che introduce sd.