J'ai le défi suivant: imaginez un arriéré important dont vous avez besoin pour pouvoir numériser à la demande. structure de répertoire est essentiellement comme suit:bash script dynamiquement définir rangee directorie
/basedirectory/2016/01/01/uniquenamedir1/session_timestamp.log
/basedirectory/2016/01/01/uniquenamedir1/session_timestamp.log
/basedirectory/2016/01/01/uniquenamedir1/etc..
/basedirectory/2016/01/01/uniquenamedir2/session_timestamp.log
/basedirectory/2016/01/01/etc../session_timestamp.log
/basedirectory/2016/01/02/uniquenamedir2/session_timestamp.log
/basedirectory/yyyy/mm/dd/etc.../session_timestamp^n.log
Vous avez l'idée. Si je voudrais la liste des journaux à une date gamme spécifique, je peux utiliser quelque chose de simple comme:
ls /basedirectory/2017/01/{04..18}/*/*.log
# or
ls /basedirectory/2017/01/{04,05,06}/*/*.log
# or even
d1="2017/01/04"
d2="2017/01/05"
d3="2017/01/06"
ls /basedirectory/{"$d1","$d2""$d3"}/*/*.log
Mais comment puis-je garder ce simple et efficace avec une date dynamique et jour dans une gamme scénario?
Voici un exemple:
#user can set date
start_date="2017-03-07"
#user can set amount of days
day_range="2"
#catch date range in this array:
date_range=()
#When using in a function, date_range_tmp will be a local.
#Using it to set global date_range
declare -a 'date_range_tmp=($(echo {'"$day_range"'..0} | xargs -I{} -d " " date -d "'"$start_date"' +{} day" --rfc-3339="date"))'
date_range=("${date_range_tmp[@]}")
echo "${date_range[*])"
#2017-03-07 2017-03-08 2017-03-09
test1="${date_range[0]}"
#test1=2017-03-07
test2="${date_range[-1]}"
#test2=2017-03-09
test3="$(IFS=\, ; echo "${date_range[*]//-/\/}")"
#test3=2017/03/07,2017/03/08,2017/03/09
#This, unfortunately will NOT work:
ls /basedirectory/{"$test1".."$test2"}/*/*.log
# or
ls /basedirectory/{"$test3"}/*/*.log
Note: J'utilise 'ls' ici pour plus de simplicité. Je veux l'utiliser dans un script pour "grep" les fichiers, mais affiner les dates pertinentes.
Les journaux ont-ils été créés le jour correspondant à la date? Si oui, vous pouvez utiliser 'find' avec le drapeau' ctime' pour analyser le temps de création – Aserre
Malheureusement non. Il est copié par lots et parfois copié manuellement de live à backup. – Asgair