Como remover um diretório sem remover seu conteúdo?

7

Digamos que eu tenha um diretório /home/smit/test . Dentro dele eu tenho muitos subdiretórios e arquivos. Desejo remover apenas o diretório /home/smit/test e não seu conteúdo interno, para que os arquivos e subdiretórios de /home/smit/test sejam incluídos automaticamente em /home/smit/ ?

Além disso, em um caso real, eu tenho o diretório /usr/share/backgrounds/all/ que tem muitos subdiretórios. e esses subdiretórios têm muitas imagens. Desejo remover todos os subdiretórios Para que o conteúdo deles seja incluído em /usr/share/backgrounds/all/ . Eu posso fazer isso com GUI, mas eu quero fazer isso de maneira legal pelo terminal. Como posso fazer isso?

    
por SmitTheLastFirefoxUser 27.07.2017 / 11:22

1 resposta

16

Nestas situações, há o risco de arquivos com o mesmo nome serem sobrescritos. Como mencionado pelo @Arronical, você pode evitar isso usando o -b flag para mv , o que faz com que todos os arquivos com nome idêntico sejam diferenciados, anexando ~ aos seus nomes. No entanto, se houver três ou mais arquivos com o mesmo nome, somente o primeiro e o último serão salvos, portanto, verifique o conteúdo antes de mover para proteger seus arquivos.

O primeiro caso simples é fácil; podemos usar um glob globular. No entanto, isso não moverá arquivos ocultos, portanto, se você tiver qualquer nome de arquivo que comece com . , comece ativando dotglob

shopt -s dotglob

Então você pode executar:

mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test

Desative dotglob se quiser (ele retornará ao padrão assim que você abrir um novo shell):

shopt -u dotglob

Para o segundo caso (real), usaremos find , que move arquivos ocultos por padrão:

Verifique se você está no local certo primeiro.

cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;

Se isso parece bom, execute-o sem echo para realmente mover arquivos

find -type f -exec mv -vb -- {} . \;

Em seguida, encontre os diretórios

find -type d

Se você vir o que deseja remover:

find -type d -delete

Isso é seguro, pois se recusará a remover diretórios que ainda tenham conteúdo.

    
por Zanna 27.07.2017 / 11:30