Como deletar subpastas, mas manter todos os arquivos?

4

Eu estou querendo saber se existe uma maneira no Ubuntu para excluir todas as subpastas em uma pasta, mas manter todos os arquivos?

    
por user192055 11.09.2013 / 17:29

6 respostas

2

uma combinação das duas respostas acima pode funcionar.

passo 1.

find oldLocation -type f -exec mv {} newLocation \;   #find and copy all files.

passo 2.

rm -frv oldLocation 

Você pode querer reformular suas perguntas, não está muito claro qual é o comportamento desejado.

    
por csgeek 11.09.2013 / 17:52
0

Suponho que você tenha uma pasta como esta:

dir
 subdir1  <--directory
 subdir2  <--directory
 file.txt <--file
 foo.mp3  <--file
 bar.pdf  <--file

... e você simplesmente deseja excluir os dois subdiretórios e todos eles, deixando os arquivos intactos. Basta usar:

rm -r */

A barra à direita garante que ela corresponderá apenas aos diretórios (e aos diretórios).

Sua pergunta é muito vaga, por favor, edite-a para deixar claro o que você realmente quer.

    
por evilsoup 11.09.2013 / 17:58
0

Hum, eu suponho que você queira manter os arquivos em alguma nova pasta, certo?

Cuidado: verifique se você está no diretório correto. Certifique-se de fazer um teste primeiro. Certifique-se de que não haja arquivos com nomes idênticos em diretórios diferentes.

mv */* /path/to/new/folder
rmdir *

As coisas ficam um pouco mais complicadas se você tiver mais de um nível, por exemplo você tem sub-sub-subpastas e deseja mover os arquivos regulares e remover os diretórios. Nesse caso,

find . -type f -exec mv {} /path/to/new/folder \;
find . -type d -exec rm -rf {} \;

Vamos tornar o desafio ainda mais interessante. Digamos que queremos mover os arquivos, mas queremos mudar os nomes de forma que eles reflitam a estrutura do diretório. Por exemplo, se no diretório atual houver um arquivo foo.jpg in ./blah/pah/oh/ , queremos renomeá-lo como blah_pah_oh_foo.jpg . Por motivos de segurança, podemos copiá-lo em vez de se mover.

for i in 'find . -type f -print' ; do \
  newname='echo $i | sed 's/^\.\///;s/\//_/g'' ; \
  echo moving $i to $newname ; \
  mv $i $newname ; \
done
    
por January 11.09.2013 / 17:46
0

Supondo que você tenha um diretório onde você deseja excluir todos os subdiretórios e quaisquer arquivos e diretórios que eles contenham , mas manter os arquivos que estavam no diretório original, você pode fazer

find your_directory -maxdepth 1 -type d -exec rm -rf {} \;

Então, uma árvore como

/path/to/dir1
|_ _ _ _ subdir1
|           |_ _ _ _ file1
|           |_ _ _ _ file2
|
|_ _ _ _ subdir2
|
|_ _ _ _ file3
|
|_ _ _ _ file4

executando

find /path/to/dir1 -maxdepth1 -type d -exec rm -rf {} \;

vai deixar você com

/path/to/dir1    
|
|_ _ _ _ file3
|
|_ _ _ _ file4
    
por Joseph R. 11.09.2013 / 18:31
0

Eu sei que é possível excluir todos os arquivos, mas manter os diretórios por este comando:

find . -name *.* -exec rm -f {} \;

Mas eu não acredito que haja um caminho oposto.

    
por Noosrep 11.09.2013 / 17:33
-1

A questão é impossível. Você não pode excluir um diretório sem prejudicar os arquivos dentro dele.

    
por Arnold 11.09.2013 / 18:03

Tags