A razão pela qual seu script está falhando é que $9-bkp
é tratado como uma expressão: o -bkp
também deve ser citado, portanto, a linha deve ser:
ls -lt *.xls | head -10 | awk '{print "mv " $9 " "$9"-bkp"}' | sh
No entanto, isso é desnecessariamente complicado: você lista vários atributos de arquivo e, em seguida, usa awk
para extrair o nome. Além disso, você não precisa iniciar um subshell para executar os comandos gerados. Além disso, o comando acima não funcionará se houver espaços em um nome de arquivo.
Os seguintes endereços abordam todos esses pontos:
ls -t *.xls | head -10 | while read; do mv "$REPLY" "$REPLY-bkp"; done
Nesse caso, ls -t
lista apenas os nomes dos arquivos, um por linha; read
copia cada linha completa em REPLY
, incluindo todos os espaços, sejam incorporados, entrelinhados ou finais; e o comando mv
é executado para cada linha.
Observe que o mais comum read name
copiará uma linha em name
, mas sem espaços à esquerda e à direita.