Deve ser fácil o suficiente para ajustar a saída do diff para atender às suas necessidades ... apenas canalizar o diff através do sed.
sed -r -e 's/^.*Only in //' -e 's@: @/@'
estava tentando comparar dois diretórios. um diretório é o diretório de referência (dir1) e o outro é o diretório onde as modificações (dir2) estão sendo feitas
Eu preciso da lista de arquivos que são modificados ou adicionados no dir2 comparado com o dir1.
Eu usei rsync e diff e obtive o resultado. Mas precisa dos arquivos com Path absoluto na saída.
diff --brief --recursive /test/dir2 /reference/dir1
A saída é
Only in /test/dir2: king.txt
Only in /test/dir2/sdir2: abc.txt
Only in /test/dir2: test1
Only in /test/dir2/sdir3: test.txt
e usando o rsync
rsync -av --dry-run /test/dir2/ /reference/dir1
saída
sending incremental file list
./
king.txt
test.txt
sdir2/
sdir2/abc.txt
test1/
sent 52712 bytes received 1339 bytes 108102.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
precisa da lista com o caminho completo /test/dir2/king.txt e ser armazenado em um arquivo.
Atenciosamente, KJ.
Você poderia apenas analisar a saída de diff
:
diff --brief --recursive /test/dir2/ /reference/dir1/ |
gawk '(/Only/){print $3""$NF}' | sed 's/://'
Certifique-se de incluir o /
à direita nos nomes dos diretórios, esta solução os espera. Use /test/dir2/
e não /test/dir2
. Além disso, isso não funcionará se os nomes dos arquivos contiverem espaços.
Tags bash linux shell-script