Como excluir todos os arquivos no diretório atual, exceto os dois últimos [duplicados]

0

Digamos que há 10 arquivos neste diretório atual /home/usr . Eles são numerados em 1 - 10 . Se eu quisesse excluir todos os arquivos, exceto 9 e 10 , como eu faria isso?

Eu posso selecionar os dois arquivos abaixo fazendo

ls -l /home/usr/ | tail -2

No entanto, como eu usaria essa informação para remover todos, MAS os dois últimos? Em outras palavras, como eu removeria 1 - 8 ?

Vou esclarecer algumas coisas. Gostaria de remover com base na listagem de ls -l e não especificamente pelo nome dos arquivos. Como nesses arquivos 1 - 10 foram exemplos. Ele deve remover arquivos independentemente dos nomes específicos e remover os dois inferiores de ls -l .

    
por keyboard_solo 17.01.2017 / 22:44

3 respostas

2

com zsh :

echo rm -f /home/usr/*(n[1,-3])

(remova echo quando estiver satisfeito)

  • n para classificar em ordem numérica (10 após 2)
  • [1,-3] para selecionar apenas do primeiro ao terceiro último.

(adicione o qualificador D glob se você também quiser considerar arquivos ocultos)

    
por 17.01.2017 / 22:49
0

Solução não muito bonita de zsh :

find . -name 'prefix*' | sort -V | head -n -2 | xargs echo rm --

Assumindo:

  1. Assumindo que todos os arquivos compartilhem o mesmo prefixo de nome de arquivo prefix e não tenham novas linhas ou outros caracteres engraçados em seus nomes.
  2. Seu sort suporta -V e classifica corretamente no seu caso (testei com arquivos no mesmo formulário prefix + número simples e funciona para mim, gerado usando touch prefix{1..100} in bash BTW ).
  3. Seu head suporta -n .

(Os parâmetros devem ser suportados em todas as distribuições atuais do GNU / Linux.)

Remova echo para desbloquear.

    
por 17.01.2017 / 23:07
0

Se os seus arquivos forem de fato denominados de 1 a 10, você poderá usar

rm {1,8}

Ou uma variação disso para indicar o intervalo, como foobar{1,8} .

    
por 17.01.2017 / 23:23