move arquivos / diretórios com nomes similares, regra correspondente

0

Movíamos cerca de 4TB de arquivos para um Windows Server2 008R2 de um OS X Server. Muitos dos nomes de arquivos não puderam ser movidos devido a caracteres incompatíveis. Nós rodamos uma ferramenta de renomeação para corrigir o problema e copiámos novamente. Meu problema é agora eu tenho um monte de pastas que têm nomes muito semelhantes como "O'Neil" e "O_Neil". Na verdade, até onde posso dizer, todos estão em conformidade com essa regra. Há muitos para fazer à mão, estou pensando em escrever um script, mas tenho pouca experiência com scripts. Eu gostaria de comparar a data de modificação ou o tamanho do arquivo e mesclar ou mover as pastas para um arquivo e deixar um conjunto no lugar. Não tenho certeza sobre as melhores práticas nesta situação.

  1. Em teoria, qual é a melhor prática, mesclar por data, arquivar as versões menores?
  2. Na prática, como posso consertar isso, existem ferramentas? Idéias de script?

Qualquer ajuda é muito apreciada.

    
por Keith Loughnane 24.10.2012 / 14:02

1 resposta

0

Esta não é uma questão direta - é um pedido de comentários e exemplos de scripts - e pode gerar muitas discussões. É melhor postar muitas pequenas perguntas focadas para obter um answare.

De qualquer forma, no servidor mac você pode contar com um miriad de ferramentas de linha de comando para ajudá-lo no script.

Primeiro, você pode listar todos os arquivos / pastas nos quais deseja aplicar regras:

$> find "rootPathToSearchOn" -name "namingRule" -regex "betterNamingRule"

ex:

$> find . -maxdepth 1 -regex "./[a-zA-Z]*[_'][a-zA-Z]*"
./o_neil
./o'neil
...

Dessa forma, você pode separar aqueles com sublinhados daqueles com aspas. Em seguida, passando a saída de find para 'xargs', você pode chamar um script para os arquivos selecionados:

$> find . -maxdepth 1 -regex "./[a-zA-Z]*[_][a-zA-Z]*" -print0 | xargs -0 -I fileName ./myScript.sh fileName

Um script simples como:

nameToTest='echo $1 | tr "_" "'"'
if [ -e $nameToTest ];
then echo $nameToTest has a collision to $1;
fi;

Deve produzir algo como:

./o'neil has a collision to ./o_neil

Nesse caso, você pode preencher o bloco "then" com as ações desejadas.

Agora, a estratégia para mesclar depende do seu cenário - a data de criação do diretório não indica a data de seu conteúdo - e somar o tamanho do arquivo do conteúdo do diretório não indica a atividade nele.

    
por 24.10.2012 / 15:11