renomear top 10 mais recente arquivo de acordo com seus nomes


0

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

Eu tentei, não trabalhando

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

Eu tentei encontrar e -exec mas como podemos obter top 10 últimos arquivos modificados

Respostas:


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, então a linha deve ser:

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

No entanto, isso é desnecessariamente complicado: você está listando muitos atributos de arquivo, então use 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.

O seguinte aborda 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 REPLY, incluindo todos os espaços, sejam incorporados, principais ou finais; e a mv comando é executado para cada linha.

Note que o mais comum read name irá copiar uma linha para name, mas sem espaços iniciais e finais.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.