find + xargs - move arquivos de um subdir para outro

1

Minha estrutura de pastas é assim:

/volume1
  /photoTest
    /folderA
      /@eaDir
      /eaDir_tmp 
    /folderB
      /@eaDir
      /eaDir_tmp 
    /folder with space
      /@eaDir
      /eaDir_tmp 

O que estou tentando fazer é copiar os arquivos de cada eaDir_tmp para sua respectiva pasta @eaDir .

Consegui fazer isso acontecer:

for a in $(find /volume1/photoTest -type d -name eaDir_tmp); do rsync -vhar --chmod=a+rwx $a/ $a/../@eaDir; done;

até eu atingir a pasta com espaços. O script acima simplesmente adivinha.

Depois de muita pesquisa, eu tentei:

find /volume1/photoTest -type d -name eaDir_tmp -print0 | xargs -0 rsync -vhra --chmod=a+rwx {} {}/../@eaDir

A execução a seco deste comando é executada sem problemas. Mas a corrida real fica paralisada depois de imprimir isso.

sending incremental file list
@eaDir/subdir1/

E fica preso nele.

ps -elf | grep rsync mostra vários processos rsync em wait e poll_s state.

Alguém tem alguma ideia do que está acontecendo? E qual a solução?

Atualização : alguns esclarecimentos com base no comentário:

  • Mover ou Copiar? Bem, o objetivo final é "mover". Mas eu gostaria de saber como copiar também.
  • O que está acontecendo - sim, eu gostaria de saber o que está acontecendo e por que meus comandos não estão funcionando como esperado. Espero aprender algo, já que não sou um usuário comum do Linux.
  • Qual a solução? Bem, eu gostaria de saber isso também. :)
  • O que há dentro de eaDir pastas? Mais pastas e, em seguida, alguns arquivos dentro deles. Se isso ajuda, a coisa toda começou com isso: link . O autor sugere excluir as pastas @eaDir existentes e simplesmente renomear eaDir_tmp . Mas não posso fazer isso porque as pastas existentes contêm arquivos que gostaria de manter. Eu posso explicar, mas acho que isso vai enlamear ainda mais a questão.
  • execdir funciona - no sentido em que não diz um argumento inválido ou lança algum erro. Mas não atinge o objetivo, ou seja, copiar os arquivos corretamente.
  • Quão rica é minha find ? Isso está dentro do meu Synology NAS, que eu acho que está rodando o BusyBox? Não tenho certeza embora. Como eu descubro?
  • Se os arquivos de destino existirem, eu gostaria de sobrescrevê-lo se a origem for mais recente. Caso contrário, não.
por Mrchief 30.12.2017 / 01:22

1 resposta

0

Não tenho certeza porque rsync fica preso. mas consegui fazer alguns progressos usando 2 comandos:

Primeiro , copie todos os arquivos por:

find /volume1/photo -type d -name eaDir_tmp -exec cp -a -t {}/../@eaDir {}/. \;

Segundo , altere as permissões do arquivo:

find /volume1/photo -type d -name @eaDir -exec chmod 777 {} -R \;

Não só isso é desajeitado e lento, mas parece que estou lidando com o MS-DOS. Onde estão os gurus do linux?

    
por 30.12.2017 / 18:53