Como posso mover arquivos para um diretório em que possa haver centenas ou milhares de arquivos no diretório, e você pode não ter certeza sobre a existência de dupes ..
. Qual método você usaria?
Como lidar com os enganadores varia, às vezes sobrescrevemos, às vezes precisamos ser mais seguros. E / S pode ser importante porque esses são servidores de produção. Mas, dada a quantidade, um prompt para arquivos não duplicados não é uma opção. Preservação de permissões, registros de data e hora, etc., é importante. Normalmente, não sabemos quais são os dados.
Oh e usando mv
não é necessária, rsync
, cp
soluções de boas-vindas.
note: estamos executando o CentOS 5.5, por isso, deixe-me saber se ele não funcionará lá por ser um recurso mais recente ...
command-line
rename
xenoterracida
fonte
fonte
mv
e se nos preocupamos com a preservação no caso de ... e se já fizemos um backup. Esta questão é bastante aberta. Estou apenas procurando boas opções, e talvez um comentário sobre se pode ou não morder você e como.mv * ../
oumv -i * ../
?Respostas:
Eu recomendaria usar o rsync do pai:
que fará o backup de todos os arquivos duplicados existentes no pai para o arquivo - original .
fonte
-a
implica-r
-l
forcp
)-H
ou--hard-links
do rsync para preservar os links físicos .--link-dest=DIR
sinalizador para obter esse comportamento como: orsync -avP --link-dest=/path/to/src /path/to/src/* /path/to/dest/
qual vinculará dst / quaisquer arquivos inalterados entre src e src, neste caso todos os arquivos. Normalmente, você vê esse sinalizador usado quando deseja vincular novamente os arquivos de backup sem copiar seus dados, como--link-dest=/most/recent/backup
.Isso copiará tudo do diretório atual para o diretório acima, mantendo todas as permissões, usando hardlinks para minimizar o IO, se possível, e em duplicatas ele cria o nome do arquivo ~
depois disso
fonte
Neste exemplo, os arquivos serão movidos de '/ parent / old-dir' para '/ parent':
Pelas regras do rsync, ele substituirá os dups por arquivos mais recentes do
old-dir
.fonte
Podes tentar
que sobrescreverá arquivos duplicados em ..
Você pode usar mv -u '{}' para não sobrescrever se o dupe in .. for o mesmo ou mais recente
fonte
..
para omv '{}' +
comando, pois o + apenas adiciona ao final.-exec mv -t .. -- {} +
. Portably:-exec sh -c 'mv -- "$@"' _ {} +
.mv -i
somente solicita se o destino existir.yes n | mv -i …
move todos os arquivos que não existem no diretório de destino. No FreeBSD e OSX, você pode reduzi-lo paramv -n …
.Observe que nenhum deles mesclará um argumento de diretório com um diretório existente com o mesmo nome no diretório de destino.
Uma questão separada é como agir em todos os arquivos no diretório atual. Há dois problemas: pegar todos os arquivos (
*
omite arquivos de ponto) e não executar em uma linha de comando. No Linux (ou mais geralmente com o GNU find e o GNU coreutils):Com o GNU find mas não o GNU coreutils (ou o GNU coreutils mais antigo):
Portably:
Como de costume, o zsh facilita as coisas. Ele não possui uma limitação de comprimento de linha de comando internamente; portanto, se você o usa interno,
mv
não precisa se preocupar com isso. E você pode dizer para não ignorar arquivos de ponto com oD
qualificador glob. Limitação: isso não funciona em sistemas de arquivos (a partir do zsh 4.3.10).fonte
Eu disse no nosso ML
obviamente isso não é muito seguro ... ele substituirá as coisas. Pode ter limites que eu nunca encontrei.
fonte
-
. Ele não captura arquivos cujo nome começa com.
.A seguir, um modelo python que eu usei com bons efeitos no passado.
fonte