
Estou tentando diferenciar recursivamente dois diretórios usando o diff
utilitário de linha de comando. Eu tenho duas pastas, diff1
e diff2
, com conteúdo como este:
diff2
está vazia. Mas quando o faço, diff -r diff1 diff2
só consigo
$ diff -r diff1 diff2
Only in diff1: folder
Only in diff1: test.html
Isso é irritante. O que preciso fazer para começar a diff
trabalhar recursivamente? Eu tentei --recursive
, mas isso não ajuda. Estou no El Capitan e um diff -v
me pega diff (GNU diffutils) 2.8.1
.
Responder1
O comportamento que você experimentou é intencional. Eu não acho que você possa conseguir o que deseja, a menos que permita outras ferramentas além do diff
. Do seu comentário:
Quando leio "recursivamente", presumo que o processo não irá parar no primeiro nível.
Não para por causa do primeiro nível. Veja o que significa recursão:
usando funções quechamam a si mesmos de dentro de seu próprio código
(fonte:aqui; ênfase minha)
Imagine que você tenha um subdiretório comum foo
em diff1
e diff2
. Recursão significa que seu comando original diff -r diff1 diff2
em algum momento chama
diff -r diff1/foo diff2/foo
OK, na prática isso provavelmente é feito por uma sub-rotina que se autodenomina dentro de um único processo (mas acho que diff
é possível uma implementação que realmente chame executável). Ainda logicamente é assim.
Você tem diff1/folder
, mas não há diff2/folder
. Como você pode ligar diff
para comparar isso? Em outras palavras, o que deveria <unknown_name>
ser para que você obtenha o resultado desejado no formulário abaixo?
diff -r diff1/folder diff2/<unknown_name>
Não há <unknown_name>
que se encaixe. Recursivo diff
não pode descer folder
sem se transformar em algo como recursivo ls
ou find
. Ser recursivo ls
ou find
não é seu trabalho.
Ainda assim, você pode consultar diff1/folder
com ls -R
ou find
(recursivo por padrão), depois de aprender com diff
isso Only in diff1: folder
.