parts = grep "/root/backups/*"
for part in $parts
do
echo $part
rm -rf $part #delete
done
Basicamente, preciso percorrer uma pasta e retornar todos os itens da pasta usando um script Bash.
Não é possível trabalhar via grep, embora possa ser uma maneira muito mais simples. A primeira linha é puro código pseudo-sem pistas.
Responder1
Isso pode ser feito facilmente sem loop.
Se você quiser apenas se livrar dos arquivos, basta usar rm:
$ rm -rf /root/backups/*
Se você quiser mostrar os nomes dos arquivos ao excluí-los, use find:
$ find /root/backups -maxdepth 1 -mindepth 1 -print -exec rm -rf {} \;
A opção -maxprofundidade diz ao find para não descer mais do que um nível do ponto inicial, /root/backups. A opção -minprofundidade informa ao find onde começar a retornar resultados, efetivamente dizendo ao find para ignorar o ponto de partida. A opção -print apenas imprime os arquivos encontrados na tela. Com o -exec, os {} são substituídos pelos arquivos encontrados, então isso chama rm para excluí-los.
EDIT: eliminou um -exec desnecessário por comentário
Responder2
Altere o comando grep para:
para i em ``ls -bRC1 /path/*
; faça echo $i ; rm$i; feito
O -b irá escapar de espaços e outros caracteres que podem resultar em erros e consequências não intencionais com o rm. -R é recursivo. -C1 é uma coluna única (que pode ser redundante). Eu reconsideraria o -rf
Você pode querer usar find em vez de um loop for
find /path -H -maxdepth 3 -type f -mtime +7 -exec rm {} \; -ls
Se você não sabe o que significam as opções acima, digite man find
.
Responder3
grep -l fornecerá apenas os nomes dos arquivos
partes = grep -rl ....
Responder4
Você deseja uma lista de nomes de arquivos em um determinado diretório. Existe um programa que faz isso, e você fica com vergonha de ler o nome dele: ls
. Isso é tudo que faz! Você deseja uma listagem recursiva incluindo arquivos em subdiretórios, então use ls -R
. Você pode colocar a saída disso em uma variável em seu script e fazer o que quiser com ela.