Qual é a melhor maneira de excluir arquivos e pastas em um diretório, excluindo o conteúdo de uma pasta? [duplicado]

1

Estou tentando automatizar alguns arquivos que faço com freqüência. Eu quero excluir todos os arquivos e pastas em um diretório, excluindo a pasta "./xfer" e seu conteúdo.

Eu tenho tentado fazer isso usando o comando find, mas está ficando um pouco desajeitado. Existe uma maneira melhor? Eu configurei meu ambiente de teste executando:

mkdir test0{1..5}; find . -type d -exec touch '{}'/test-0{1..5} \;

Aqui está o comando que tenho trabalhado. Btw eu sou um pouco novo e estou fazendo principalmente isso como um exercício de aprendizagem. Além disso, este seria o último comando de um pequeno script com o qual estou quase terminando.

find /some/directory/path/* -type f ! -path "/some/directory/path/xfer/*" -exec rm -fv {} \;; find /some/directory/path/*  -type d ! -path "/some/directory/path/xfer" -exec rm -rfv {} \;
    
por dnbpanda 02.06.2015 / 17:21

4 respostas

1

Você pode usar -prune :

find . -path ./xfer -prune -o -exec rm -fv {} \;

Ao listar os arquivos, se o caminho corresponder a ./xfer , o arquivo será removido, caso contrário rm será chamado.

    
por 02.06.2015 / 17:27
1
find ./* -prune ! -path './xfer' -exec rm -fr {} +

Mais correto (mas GNU):

find . -mindepth 1 -maxdepth 1 ! -name 'xfer' -exec rm -fr {} +

ou

find . ! -path './xfer' ! -path '.xfer/*' -delete
    
por 02.06.2015 / 17:38
0

Que tal um loop for? for i in $(ls|grep -v xfer);do rm -r $i;done

    
por 02.06.2015 / 17:59
0

Talvez não seja o que você está procurando, mas é como geralmente faço isso. Eu movo as coisas que quero manter fora do caminho.

mv dir/keepme tmp/keepme
rm -rf dir/*
mv tmp/keepme dir/keepme

Cuidado para ficar dentro do mesmo sistema de arquivos, então mv não copia / apaga.

    
por 02.06.2015 / 18:32