BASH and wildcard expansion
g
geleem at bellsouth.net
Tue Aug 20 09:33:40 UTC 2013
hello mark,
On 08/19/2013 01:56 PM, Mark Haney wrote:
> I've hit a problem I can't quite figure out which a bash script I'm
> writing. I'm trying to copy backup files in the format
> 2013-August-18--1123.zip to an NFS share. I want to have the script copy
> the file with just the date. In bash I've setup vars that get the current
> date:
>
> # Date variables
> log_year=`date "+%Y"`
> log_month=`date "+%B"`
> log_day=`date "+%d"`
>
> # Filename format YYYY_MM_DD--HHMM.zip
> filename=$log_year"-"$log_month"-"$log_day"--"/*".zip"
why are you showing "/*" in your "filename=" statement?
such would indicate date as a directory and _all_ files in a directory that
ends with "zip".
if you meant to _delimit_ the "*", then "\" is used to delimit.
i believe actual 'filename' should be;
$log_year"-"$log_month"-"$log_day"*.zip"
> The problem is I don't really care about the stuff after the '--'.
you better care about it as it is written, as, for what you want, 'filename'
would be as i present.
> I.e. from the CLI I'd just 'ls 2013-August-18--*.zip' to get all the
> files with that date in the file name. How can I do that in a bash script?
not if you use the "/*".
problem just might be that you have worked with it too long and not
really seeing what you are doing. ;=)
ls 2013-August-18--*.zip
should show _all_ files for 18 august, 2013, regardless of time, in
'current' directory.
if not, something is bad wrong.
when i time stamp a backup file, i use;
yyyy-mmdd-hhmm-filename
or
filename-yyyy-mmdd-hhmm
then, when i collect them for transfer to backup tape media, i use;
find . yyyy-mmdd-* | sort | cpio -o -[arguments] /dev/tape
or
find . *-yyyy-mmdd | sort | cpio -o -[arguments] /dev/tape
which finds _all_ files of *-yyyymmdd or yyyymmdd-* and they are backed up.
[and yes, i use *yyyymmdd* for various reasons]
not that much difference if you are using multi "-".
from 1 of my script files;
find $1 -depth | sort | cpio -o -Bcmv > [path to backup file]$2.cpio
and then backup the *.cpio file.
"$1" and "$2" are passed to script from command line.
i have a rather extensive collection of script files that i use for tape
backup that i have used for years for both argument passing and no argument
passing for regularly preformed backups with out problems.
i can not access the extensive list of "find|sort|cpio" at this time.
see attached for a short list. it should give you an idea of using find,
sort, and cpio.
hth.
--
peace out.
in a world with out fences, who needs gates.
sl6.3 linux
tc.hago.
g
.
-------------- next part --------------
## cpio.tape v .2009.1115
#!/bin/sh
# routines using cpio to write and read a scsi tape drive
if [ $# = 0 ] ; then
echo;echo " change to directory to be copied"
echo " or where to dump tape.";echo
echo " cpio.tape { (w)rite | (r)ead | (l)ist files }";echo
fi
# making a command line tape backup quick, easy,
# and with out need of any special programs.
# create a link from tape device to '/dev/tape'.
# cd to top directory of path to back up when doing write. this way, when you
# restore, you may restore files were ever you wish, as '/' is never implied.
# =+= write, full backup; [w/ 5120 byte record]
# **note** using 'grep -iv "\./proc"' eliminates '/proc' path
if [ "$1" = "w" ] ; then
find . -print | grep -iv "\./proc" | sort | \
cpio -oaBcv -O /dev/tape
fi
# =+= write, modified; [1 day old]
# find . -mtime 1 -type f -print | cpio -oaBcv -O /dev/tape
# =+= restore all;
if [ "$1" = "r" ] ; then
cpio -iBcdlmv -I /dev/tape
fi
# =+= restore a file;
# if [ "$1" = "r" ] ; then
# echo "path-filename" | cpio -iBcdlmv -I /dev/tape
# fi
# =+= view names of files stored; [builds an index file]
# cpio -iBct -I /dev/tape [ > bkup.indx ]
# or, for 'ls -l' type output;
if [ "$1" = "l" ] ; then
# "cpio -iBctv -I /dev/st0 > bkup.indx"
"cpio -iBctv -I /dev/tape/scsi-nst > bkup.indx"
fi
# =+= run backup from cron;
# 30 01 * * * find . -print | grep -iv "\./proc" | \
# sort | cpio -oaBcv -O /dev/tape
# or;
# 30 01 * * * 'script-file'
# [where 'script-file' is any combination of _write_.]
# =+= why cpio?
# cpio is available on all systems, as is tar.
# cpio will span multiple tapes, as will tar.
# cpio will skip bad data and tell you, tar may not.
# read 'man' for: cpio, cron, find, grep, sort.
# =+= end.
More information about the users
mailing list