Cite suas variáveis!
while read line e, em seguida, ls $line não funcionarão; você tem que usar ls "$line" para manipular espaços em branco nas variáveis. Geralmente, cite suas variáveis quando você as usa!
Se você não fizer isso, estará fazendo um grande problema ao tentar rm $line , se essa linha for
~/mail/. Trash/new
Então, se você fez ls $line , tentaria listar duas pastas:
-
~/mail -
Trash/new
No pior caso, se você fizesse um rm -rf $line , você removeria ~/mail completamente ! Então, use ls "$line" dentro do seu loop. E o mesmo para rm .
Na verdade, a maneira mais robusta de ler um arquivo linha por linha e tratar adequadamente os espaços em branco é explicada aqui :
while IFS= read -r line; do
ls "$line"
done < "$file"
O -r impede que as barras invertidas sejam expandidas, e IFS= ajuda no caso de uma linha começar ou terminar com um espaço em branco, que o shell cortaria de outra forma.
Não use caminhos que precisam ser expandidos!
Se o seu arquivo de texto contiver caminhos que serão posteriormente expandidos, o caminho será alterado dependendo de quem executa o script. Aqui, ~ será expandido para o caminho inicial do usuário no momento da execução, portanto, se você estiver executando o script como root , ele será iniciado a partir de /root e não a partir da origem do usuário no ponto de criação o arquivo de texto.
Portanto, armazene os caminhos completos em seu arquivo.