Dada a seguinte situação ...
<path>/mydir1/mydir2
... onde mydir2 deve ter substituído mydir1, mas foi colocado dentro, e ambos os diretórios possuem o mesmo nome de arquivo. Como isso é fixo?
A tentativa de fazer mv <path>/mydir/mydir/* <path>/mydir/
ou mv <path>/mydir <path>/
resulta em:
mv: cannot move '<path>/mydir/mydir' to a subdirectory of itself, '<path>/mydir'
Isso parece estupidamente simples, mas é tarde aqui e eu não consigo entender.
Existem dezessete diretórios para consertar (o caminho difere para cada um, mas o mesmo nome mydir).
Para confirmar, a mensagem de erro pode ser causada por isso:
# cd /path/to/directory
# mv mydir/mydir ./
mv: cannot move 'mydir/mydir' to a subdirectory of itself, './mydir'
Também tentei:
# mv mydir/mydir/* mydir/
mv: cannot move 'mydir/mydir/otherdir1' to a subdirectory of itself, 'mydir/otherdir1'
mv: cannot move 'mydir/mydir/otherdir2' to a subdirectory of itself, 'mydir/otherdir2'
e ...
# mv /path/to/directory/mydir/mydir/otherdir1 /path/to/directory/mydir/
mv: cannot move '/path/to/directory/mydir/mydir/otherdir1' to a subdirectory of itself, '/path/to/directory/mydir/otherdir1'
e usando um diretório temporário:
# mv mydir/mydir ./mydir-temp
# mv mydir-temp/* mydir/
mv: cannot move 'mydir-temp/otherdir1' to a subdirectory of itself, 'mydir/otherdir1'
mv: cannot move 'mydir-temp/otherdir2' to a subdirectory of itself, 'mydir/otherdir2'
Eu encontrei uma pergunta semelhante " Como recursivamente mover todos os arquivos (incluindo ocultos) em uma subpasta para uma pasta pai em * nix? ", o que sugeriu que mv bar/{,.}* .
faria isso.
Mas isso também gera os mesmos erros, além de confundir os .
e ..
de algum lugar.
# cd mydir
# mv mydir/{,.}* .
mv: cannot move 'mydir/otherdir1' to a subdirectory of itself, './otherdir1'
mv: cannot move 'mydir/otherdir2' to a subdirectory of itself, './otherdir2'
mv: cannot move 'mydir/.' to './.': Device or resource busy
mv: cannot move 'mydir/..' to './..': Device or resource busy
mv: overwrite './.file'? y
Outra pergunta semelhante " estranheza do comando do linux mv " sugere que mv
não sobrescrever e uma cópia é necessária.
# cd mydir
# cp -rf ./mydir/* ./
cp: overwrite './otherdir1/file1'? y
cp: overwrite './otherdir1/file2'? y
cp: overwrite './otherdir1/file3'?
Isso parece estar funcionando ... exceto que há muitos arquivos (e dirs) - não quero confirmar todos!
O f
não deveria impedir isso?
Ok, então cp
foi aliado para cp -i
(que eu descobri com type cp
) e ignorado usando \cp -rf ./mydir/* ./
que parece ter funcionado.
Embora eu tenha resolvido o problema de obter dirs / arquivos de um lugar para outro, ainda estou curioso sobre o que está acontecendo com o mv
stuff - isso é realmente um recurso deliberado como sugerido pela Warner ?