Esta resposta toma emprestado liberalmente de alguns comentários. Mande seu amigo correr
dir /b/s/a-d > dir.out
Você corre
find . -print > find.out
Normalize dir.out e find.out :
- Torne os finais de linha uniformes (por exemplo, NL ou CRLF),
- Remover prefixos comuns (
C:\Users\…e./), - Altere as barras invertidas (
\) para barras (/) emdir.oute - Classifique os dois arquivos.
Agora faça
comm dir.out find.out
(Você pode querer canalizar isso em um pager como more ou less .)
A saída consistirá em três colunas:
- Entradas (nomes de arquivos) presentes apenas no primeiro arquivo (
dir.out). Não deveria haver nenhum; se houver, seu amigo incluiu um arquivo que ele não recebeu de você ou você não normalizou completamente os arquivos. (OK, dependendo exatamente como seu amigo fez o comandodir, o arquivodir.outem si pode aparecer na coluna 1.) - Entradas presentes apenas no segundo arquivo (
find.out). Estes são os nomes dos arquivos que você tem em seu sistema, mas que seu amigo não listou. Em outras palavras, esses são os arquivos que você deseja excluir. - Entradas presentes nos dois arquivos. Isso deve ser o mesmo que
dir.out.
Se houver falsos negativos devido a diferenças entre maiúsculas e minúsculas ("A" a a "),
tente o comando comm novamente com uma opção -f .
Você provavelmente repetirá a opção sort com -f .
Agora , digite comm -13 dir.out find.out . Esta sintaxe incrivelmente danificada pelo cérebro significa
"Me dê toda a saída normal, exceto para as colunas 1 e 3", em outras palavras, apenas a coluna de saída 2. Como indicado acima, esta é a lista de arquivos que você deseja excluir,
então canalize-o em xargs rm ou algo parecido.
Estou assumindo que você não tem personagens malucos (como espaço, aspas, "*", "?", "<", "|", etc.) nos seus nomes de arquivo. (Isso não deve ser um problema; as câmeras tendem a usar nomes de arquivo como "DSCN1234.JPG".)