Como faço esse script pesquisar em todas as pastas base de usuários e, em seguida, rm -f os arquivos que correspondem a EXT? [duplicado]

1

Como faço esse script pesquisar nas pastas iniciais de todos os usuários e, em seguida, rm -f dos arquivos que correspondem a EXT? No momento, está apenas excluindo os arquivos que correspondem a EXT na pasta atual em que estou executando o script.

#!/bin/bash
EXT=jpg
for i in *; do
  if [ "${i}" != "${i%.${EXT}}" ];then
    echo "I do something with the file $i"
    rm -f $i
  fi
done
    
por Saith 15.01.2018 / 18:37

2 respostas

4

Use a opção globstar do bash para recurse para você:

EXT=csv             ## for example
shopt -s globstar failglob
rm -f /home/**/*."$EXT"

(Supondo que todos os diretórios pessoais do usuário estejam em / home). Eu também defini failglob para que, se não houver arquivos correspondentes, o comando rm não seja executado.

Mais geralmente, você pode acessar os diretórios pessoais do usuário com um loop de shell:

shopt -s globstar failglob
for homedir in $(getent passwd | awk -F: '$3 >= 500 { print $6 }'|sort -u)
do
  rm -f "$homedir"/**/*."$EXT"
done

Isso é executado na suposição de que você não possui diretórios pessoais de usuário com espaços, guias ou novas linhas.

    
por 15.01.2018 / 18:46
0

Para testar:

find /home/ -name '*.txt' -exec ls -l {} \;

Para remover realmente:

find /home/ -name '*.txt' -exec rm -f {} \;

Claro, substitua "txt" pelo que você precisa.

    
por 15.01.2018 / 21:51