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
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)
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.