diff não funcionará recursivamente

diff não funcionará recursivamente

Estou tentando diferenciar recursivamente dois diretórios usando o diffutilitário de linha de comando. Eu tenho duas pastas, diff1e diff2, com conteúdo como este:

insira a descrição da imagem aqui

diff2está vazia. Mas quando o faço, diff -r diff1 diff2só consigo

$ diff -r diff1 diff2
Only in diff1: folder
Only in diff1: test.html

Isso é irritante. O que preciso fazer para começar a difftrabalhar recursivamente? Eu tentei --recursive, mas isso não ajuda. Estou no El Capitan e um diff -vme 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 fooem diff1e diff2. Recursão significa que seu comando original diff -r diff1 diff2em 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 diffpara 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 diffnão pode descer foldersem se transformar em algo como recursivo lsou find. Ser recursivo lsou findnão é seu trabalho.

Ainda assim, você pode consultar diff1/foldercom ls -Rou find(recursivo por padrão), depois de aprender com diffisso Only in diff1: folder.

informação relacionada