Move um arquivo de cada vez com base em um número específico nos arquivos

2

Com base em esta pergunta , os arquivos HTML são exibidos formato foi alterado. Todos os arquivos HTML têm a data como abaixo:

20110730dateishere

dateishere é intencionalmente adicionado por mim nos arquivos, para que eu possa identificar com facilidade esses locais de data.

E agora, no diretório dos arquivos HTML, quero mover um arquivo de cada vez com base nessa data.

Se mover um arquivo por vez sem se importar com qual arquivo foi movido primeiro, posso simplesmente usar

for file in $(ls | tail -1);
do
mv $file /other/location
done

Mas como mover primeiro o arquivo mais antigo com base na data em XXXXXXXXdateishere ? (isso significa que o arquivo HTML contém 20100110dateishere movido primeiro antes de 20100111dateishere e, em seguida, o próximo arquivo; com base na data)

(nota: 20100111 significa 11 de janeiro de 2010)

    
por Najib-botak Chin 30.07.2011 / 19:31

2 respostas

3

Isso deve ser feito:

for i in $(grep dateishere *.html | sed 's/\(.*\):.* \([0-9]*dateishere\).*/ /' | sort -k 2 | awk '{print $1}')
do
  mv $i blarg/
done
    
por 30.07.2011 / 22:20
1
for dateNfile in $(grep dateishere *html | sed -r 's/^([^:]*):(.*)dateishere/:/' | sort -n)
do  
  name=${dateNfile/*:/}
  # echo date=${dateNfile/:*/}
  mv $name /other/location
done

Então eu acho que há apenas uma linha por arquivo, contendo 'dateishere', e que a linha começa com a data, mas o comando sed pode ser modificado, para cortar a data mesmo em outros casos.

Se você tem espaços em branco nos nomes de arquivos, ou quebra de linha e tal, as coisas ficam um pouco mais complicadas, então eu gostaria de ignorá-las, se possível. Mas da sua afirmação, este não é o caso.

    
por 30.07.2011 / 21:58

Tags