Editando e alterando o palavreado para torná-lo mais claro - Tenho arquivos .dm4 em dirA e dirB. Minha pasta de referência é dirA e quero listar todos os arquivos .dm4 que estão faltando em dirA que estão em dirB e depois postar todos os .dm4s ausentes e junto com os .dm4s existentes do diretório A, no diretório C, garantindo assim que não perco nenhum .dm4s que possa existir em meu dirA e dirB.
Responder1
Vamos estabelecer algumas suposições:
- Sua concha é
bash
- SeuDiretório Aé
dirA
- SeuDiretório Bé
dirB
- SeuDiretório Cainda não existe, mas será nomeado
dirC
- Todos os arquivos de seu interesse existem
dirA
oudirB
possivelmente estão duplicados nesses diretórios
A maneira mais simples que consigo pensar é:
rm -rf dirC; mkdir dirC
cp -p dirB/*.dm4 dirC/
cp -p dirA/*.dm4 dirC/
diff <(ls dirA) <(ls dirB)
Isso colocará todos os arquivos .dm4 dirC
e produzirá uma diff
lista dos dois diretórios.
Se você precisar de um nível de detalhe maior que esse, por favoredite sua perguntapara ser mais específico.
ATUALIZAR:
Suponha que você tenha estes arquivos:
$ ls -1 dir{A,B}/*
dirA/apple.dm4
dirA/banana.dm4
dirA/date.dm4
dirA/fig.dm4
dirB/apple.dm4
dirB/elderberry.dm4
dirB/fig.dm4
dirB/grape.dm4
dirB/huckleberry.dm4
Observe que alguns arquivos estão duplicados, alguns estão apenas em dirA
, outros estão apenas em dirB
. Nenhum dos diretórios possui um cherry.dm4
arquivo, pelo que vale a pena.
E também suponha que você tenha um script foo.sh:
$ cat << EOF > foo.sh; chmod 755 foo.sh
#!/usr/bin/env bash
rm -rf dirC; mkdir dirC
cp -p dirB/*.dm4 dirC/
cp -p dirA/*.dm4 dirC/
diff <(ls dirA) <(ls dirB)
EOF
Correr foo.sh
produz:
$ ./foo.sh
2,3c2
< banana.dm4
< date.dm4
---
> elderberry.dm4
4a4,5
> grape.dm4
> huckleberry.dm4
$ ls -1 dirC/*
dirC/apple.dm4
dirC/banana.dm4
dirC/date.dm4
dirC/elderberry.dm4
dirC/fig.dm4
dirC/grape.dm4
dirC/huckleberry.dm4
A diff
saída informa que os arquivos .dm4 ausentes dirA
são elderberry
, grape
e huckleberry
. Todos os arquivos encontrados emdirA
ou dirB
estão presentes em dirC
.
Responder2
Copie todos os arquivos de dirA para dirC
cp dirA/*.dm4 dirC
Em seguida, copie todos os arquivos do dirB, ignorando os arquivos existentes no dirC
cp -n dirB/*.dm4 dirC/
Página de manual para cp
:
-n, --no-clobber do not overwrite an existing file (overrides a previous -i option)
Nota: -n
verifica apenas nomes de arquivos, para verificar versões, a -u
opção pdate pode ser interessante.