Se você está no GNU Coreutils, você tem isto:
$ date --date=2014-11-13 +"%Y%m%d"
20141113
No entanto:
$ date --date=2014-11-130ABCJUNK +"%Y%m%d"
date: invalid date ‘2014-11-130ABCJUNK’
Portanto, a tarefa é muito mais simples: extatualize os dez primeiros caracteres de cada YYYY-MM-DDetc nome do arquivo para obter a data e, em seguida, passe para date para reformatar.
Mas, se estivermos no GNU Coreutils, podemos pular o comando date porque touch tem exatamente a mesma opção --date=STRING .
for file in * ; do
date=${file%${file##??????????}} # chop all but first ten
touch --date=$date -- "$file"
done
Mas por que esse dez caractere cortando o POSIX portátil quando estamos contando com touch do GNU Coreutils?
for file in * ; do
date=${file:0:10}
touch --date=$date -- "$file"
done