Removendo duplicados

0

Eu tenho 2 pastas nessa situação, /ParentFolder/FolderName/Files.mp4 e /Mount/FolderName/Files.mp4.

Essencialmente, qualquer coisa em / ParentFolder precisa substituir qualquer pasta com o mesmo nome em / mount. Eu tenho que usar ACDCLI para a cópia real, então eu preciso removê-los primeiro chamando qualquer nome de pasta de / ParentFolder / * e rm -rf / mount / "FolderName"

Se foi uma pasta fácil, mas não sei como dizer, obtenha todos os nomes das pastas do X e exclua se eles existirem em Y.

    
por Tarley 18.05.2016 / 16:20

1 resposta

0

Não tenho certeza se é isso que você está procurando. Mas, para obter todos os nomes das pastas no X, você poderia fazer:

find /some/directory -type d -print

Repita isso em Y. É claro que, se os dois diretórios forem: /ParentFolder/FolderName/Files.mp4 e /Mount/FolderName/Files.mp4 , verifique se cd foi suficiente para que você tenha movido a parte dos caminhos diferentes. / p>

Portanto, no primeiro diretório, cd into /ParentFolder . No segundo caso, cd into /Mount .

Se você fizer isso em ambos os diretórios, você terá duas listas (vamos chamá-las de list1.txt e list2.txt ), você pode concatená-las, classificar e imprimir linhas exclusivas:

cat list1.txt list2.txt | sort | uniq -u

Estes são os diretórios que existem em apenas uma lista. Você pode armazenar isso em uma variável:

unique_paths='cat list1.txt list2.txt | sort | uniq -u | xargs'

e depois percorrer:

for my_path in ${unique_paths} ; do
  if [ -e "/ParentFolder/${my_path}" ] ; then
    ##  Do something to it
  else
    ##  This means it is in /Mount/, so do something else
  fi
done

Eu não tentei isso sozinho - então teste primeiro.

Como alternativa, você pode querer olhar para as páginas man do rsync. Algumas combinações de suas opções podem atingir o que você deseja.

    
por Ray 18.05.2016 / 17:58