renomeia os 10 últimos arquivos de acordo com seus nomes

0

Eu tenho alguns arquivos .xls em um diretório definido (digamos em / A / B). Quero renomear os 10 arquivos mais recentes e acrescentar "-bkp" em seus nomes.

Eu tentei não trabalhar

ls -lt *.xls | head -1 | awk '{print "mv " $9 " "$9-bkp}' | sh

Eu tentei encontrar e -exec mas como obtemos os 10 arquivos modificados mais recentes?

    
por Ahmad 16.05.2016 / 11:50

1 resposta

0

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.

    
por 16.05.2016 / 13:10

Tags