Um par de ponteiros:
-
Você está planejando apenas digitalizar / home para encontrar todos os diretórios home. Provavelmente está bem além da classe Intro to Linux, mas isso não funciona em configurações mais complicadas.
getent passwdpode ser um pouco melhor, mas de novo certamente além do Linux I. -
Não estou completamente claro se você está procurando palavras impróprias no arquivo nomes ou no conteúdo . Se os nomes,
findé uma maneira fácil de pesquisar nomes de arquivos (find PATHS '(' -iname '*badword1*' -or -iname '*badword2*' -or … ')' -print) -
Se você está procurando no conteúdo,
grepé de fato o caminho a percorrer. Você provavelmente vai querer que-Hfaça sempre que o nome do arquivo seja impresso.-n(número da linha de impressão, contando a partir de 1) ou-b(offset de byte de impressão) também pode ser útil. Como alternativa,-lfornecerá apenas os nomes de arquivos correspondentes. (Além disso, nem todos os arquivos são texto puro; os resultados podem ser estranhos em arquivos binários). -
O comando shell para ler de um arquivo é
read. Como você planeja solicitar ao usuário durante o loop, você terá que ler em algum lugar diferente de stdin (passando-u). Normalmente, você o usaria em um loopwhile. Além disso, observe que o redirecionamento vem após o comando - nesse caso, o comando é todo o loop!while read -r -u 5 WORD1 WORD2; do true # do something with $WORD1 and $WORD2 here done 5<filename.txt -
A divisão do Word é feita por
readcom base em$IFS, como quase todos os comandos do shell. Então, se você definir como',', ele será dividido com base em vírgulas. Se você definir como':', isso pode ser útil ☺. -
Você pode separar caminhos usando uma variedade de métodos.
cutpode fazer isso,basenameedirnameobtêm peças específicas. Osede oawktambém podem fazê-lo, mas são provavelmente excessivos. Se você estiver usando o Bash, sua expansão estendida é a maneira mais fácil (e rápida). Está na página man em "Parameter Expansion". Por exemplo:$ foo='/home/bob' $ echo "${foo#/home/}" bob
Atualização:
-
Em vez de remover uma linha específica, sugiro que você apenas escreva um novo arquivo com todas as linhas que o usuário disse que não são aceitáveis. Você pode usar algo como
sedpara excluir uma linha de um arquivo, mas (nos bastidores) está realmente escrevendo um novo arquivo sem a linha. De modo geral, os sistemas de arquivos não permitem encurtar um arquivo, exceto no final. -
O prompt é bastante fácil,
readtem uma opção para isso. Mas você vai obter um resultado surpreendente, já que você deixou de fora todas as coisas5que eu tinha no meu exemplo. -
Confira
set -xpara depuração.