Tenho a seguinte lista de arquivos:
lab-1:/tmp/tmp.NMFaDO# ls
webserver.123.net.1970-01-01.csv webserver.123.net.2016-10-01.csv webserver.123.net.2017-10-01.csv
webserver.123.net.2015-11-01.csv webserver.123.net.2016-11-01.csv webserver.123.net.2017-11-01.csv
webserver.123.net.2015-12-01.csv webserver.123.net.2016-12-01.csv webserver.123.net.2017-12-01.csv
webserver.123.net.2016-01-01.csv webserver.123.net.2017-01-01.csv webserver.123.net.2018-01-01.csv
webserver.123.net.2016-02-01.csv webserver.123.net.2017-02-01.csv webserver.123.net.2018-02-01.csv
webserver.123.net.2016-03-01.csv webserver.123.net.2017-03-01.csv webserver.123.net.current.csv
webserver.123.net.2016-04-01.csv webserver.123.net.2017-04-01.csv webserver.123.net.db.done
webserver.123.net.2016-05-01.csv webserver.123.net.2017-05-01.csv webserver.123.net.records_to_delete.txt
webserver.123.net.2016-06-01.csv webserver.123.net.2017-06-01.csv sip2.ci2.lab.jwm2.net.2018-02-01.csv
webserver.123.net.2016-07-01.csv webserver.123.net.2017-07-01.csv sip2.ci2.lab.jwm2.net.db.done
webserver.123.net.2016-08-01.csv webserver.123.net.2017-08-01.csv sip2.ci2.lab.jwm2.net.records_to_delete.txt
webserver.123.net.2016-09-01.csv webserver.123.net.2017-09-01.csv
Dentro de um script bash, preciso percorrer essa lista e extrair apenas a parte da data do nome do arquivo. Consegui descobrir como fazer isso de dentro da
pasta que contém os arquivos usando este comando:
lab-1:/tmp/tmp.NMFaDO# ls webserver.123.net*.csv | sed 's/webserver.123.net.\(.*\)\.csv/\1/'
1970-01-01
2015-11-01
2015-12-01
2016-01-01
2016-02-01
2016-03-01
2016-04-01
2016-05-01
2016-06-01
2016-07-01
2016-08-01
2016-09-01
2016-10-01
2016-11-01
2016-12-01
2017-01-01
2017-02-01
2017-03-01
2017-04-01
2017-05-01
2017-06-01
2017-07-01
2017-08-01
2017-09-01
2017-10-01
2017-11-01
2017-12-01
2018-01-01
2018-02-01
current
mas não consigo fazer a lógica funcionar dentro do meu script bash:
dir=/tmp/tmp.NMFaDO
server=webserver.123.net
for csvfile in $dir/$server.*.csv
do
echo $csvfile | sed 's/$dir\/$server.\(.*\)\.csv/\1/'
done
No momento, está imprimindo o caminho completo do nome assim:
/tmp/tmp.NMFaDO/webserver.123.net.1970-01-01.csv
/tmp/tmp.NMFaDO/webserver.123.net.2015-11-01.csv
etc.
Alguém pode me dizer o que estou perdendo no meu script bash? obrigado.
Com o formato de nome de arquivo assim, você pode remover a extensão e depois remover tudo até o último ponto.
Com expansão de parâmetros:
ou com sed:
Tome cuidado com as citações que você usa: então
"Duplique aspas" todo literal que contém espaços/metacaracteres e toda expansão:
"$var"
,"$(command "$var")"
,"${array[@]}"
,"a & b"
. Use'single quotes'
para código ou literal$'s: 'Costs $5 US'
,ssh host 'echo "$HOSTNAME"'
. Vejahttp://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words