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.
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 {} \;
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.
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
Que tal um loop for?
for i in $(ls|grep -v xfer);do rm -r $i;done
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.
Tags bash find shell-script