Você não pode fazer isso com "apenas" diff
, pois os nomes dos arquivos não coincidem em ambos os diretórios e o diff não tem nada construído para fazer o mapeamento.
O que você pode fazer é mudar para o diretório "novo" e fazer:
for i in *; do diff "$i" /path/to/other/dir/"$i"; done
ou altere para o diretório de backup restaurado e faça:
for i in *.archive; do diff "$i" /path/to/new/dir/"${i%.archive}"; done
Se isso se estender a toda a estrutura de diretórios, isso se tornará um pouco mais complexo. Se os originais estiverem abaixo de a
e o backup for restaurado temporariamente em backup/b
:
.
├── a
│ ├── p
│ │ ├── x
│ │ ├── y
│ │ └── z
│ └── q
│ ├── 1
│ ├── 2
│ └── 3
└── backup
└── b
├── p
│ ├── x.archive
│ ├── y.archive
│ └── z.archive
└── q
├── 1.archive
├── 2.archive
└── 3.archive
Você pode executar o seguinte script com python toddiff.py a backup/b > todiff
(o todiff não está listado na estrutura de árvore acima).
import sys
import os
base = sys.argv[1]
if base[-1] != '/':
base += '/' # this last / needs to be removed to create bup_file_name
backup = sys.argv[2]
for root, directory_names, file_names in os.walk(base):
for file_name in file_names:
full_name = os.path.join(root, file_name)
bup_file_name = os.path.join(backup, full_name.replace(base, '', 1))
bup_file_name += '.archive'
# adjust the diff options to your need in the following line
print('diff -u "{}" "{}"'.format(full_name, bup_file_name))
Isso gerará um arquivo do formulário:
diff -u "a/q/3" "backup/b/q/3.archive"
diff -u "a/q/1" "backup/b/q/1.archive"
diff -u "a/q/2" "backup/b/q/2.archive"
.
.
que você pode usar como fonte: source ./todiff
Nesse caso, sugiro que você execute o seguinte programa