Fazer comandos recursivos como cache mv em uma lista de arquivos?

0

Eu quero mover o conteúdo do diretório da pasta foo em um momento específico, incluindo a estrutura da subpasta para outro diretório. Se os arquivos forem adicionados à pasta de origem, eles não deverão ser movidos.

Se eu executar um comando como mv foo/* bar/ e adicionar um arquivo à pasta foo enquanto o processo estiver em execução, qual comportamento poderá ser observado?

  • o arquivo foi movido

  • o arquivo não foi movido

  • o arquivo é movido se o nome do arquivo for ordenado após o nome do arquivo que está sendo movido atualmente

  • outro comportamento

O comportamento é diferente no Windows / DOS? Qual é a maneira mais fácil de resolver o problema descrito?

    
por Basti Destruction 29.07.2016 / 00:55

1 resposta

4

Não há cache porque o comando mv nem sequer vê o caractere curinga.

O que acontece é que a linha de comando expande o curinga e passa a lista expandida para mv

Então, se você tivesse foo/1' and foo / 2 and foo / 3 ', então rodando

mv foo/* bar/

expandirá e na verdade será executado

mv foo/1 foo/2 foo/3 bar/

Quando o shell terminar a expansão e começar a executar o comando mv , qualquer alteração no diretório foo (por exemplo, foo/4 é adicionado) não fará parte do comando e será deixada para trás.

Esse processo é conhecido como globbing .

    
por 29.07.2016 / 01:15

Tags