mantém N arquivos em subdiretórios

0

Estou tentando fazer algo que parece bem simples, mas não consegui resolver.

Eu tenho um diretório com um monte de subdiretórios todos eles com vários arquivos (arquivos jpg). Eu quero executar um comando que mantenha apenas 4 ou N arquivos dentro desses diretórios. A ordem dos arquivos não é importante, já que vi perguntas relacionadas, dependendo da hora em que foram criadas

Eu joguei com o comando ls + head e tentei encontrar um loop com a opção -delete, mas ainda sem sorte.

    
por Biruwon 01.05.2017 / 13:52

2 respostas

2

Talvez algo como:

for dir in /target/dir/*/; do
  (cd -- "$dir" && set -- *.jpg && [ "$#" -gt 4 ] && shift 4 && rm -f -- "$@")
done

Com zsh , você pode diminuir para:

for dir (/target/dir/*(/)) rm -f $dir/*.jpg(N[5,-1])
    
por 01.05.2017 / 14:43
0

Supondo que esses arquivos sejam regulares, sem espaços em branco, novas linhas, aspas, barras invertidas ou caracteres inválidos em seus caminhos:

find /target/dir/ -type f \
  | awk '{t=$0; gsub(/\/[^/]*$/, "", t); if(a[t]++ < 4) print}' \
  | xargs rm --

Veja os comentários abaixo sobre como você poderia adaptá-lo para nomes de arquivos mais engraçados se os seus utilitários suportarem certas extensões.

    
por 01.05.2017 / 14:36