I'm very frustrated - I'm trying to execute a verys imple for loop and rename the files if they exist.
here is my loop :
ydate=`TZ=aaa24 date +%m%d`
CR_YR=$(date "+%Y")
echo $ydate
echo ${CR_YR}
cd /hypbin/Oracle/Middleware/user_projects/epmsystem1/EssbaseServer/essbaseserver1/app/item/itmsales
for A in AWID601 GSCD601
do
if ls $A${CR_YR}* 1> /dev/null 2>&1
then
echo "$A is available for processing"
mv ${A}${CR_YR}*.TXT ${A}${ydate}.TXT
else
echo "$A does not exist - data import process aborted"
exit 1
fi
done
But it says the files exist, however getting an error when trying to "mv" them.
10/10/17
StartTime:
04:15:40 AM
1009
2017
AWID601 is available for processing
Usage: mv [-I] [ -d| -e] [-i | -f] [-E{force|ignore|warn}] [--] src target
or: mv [-I] [-i | -f] [-E{force|ignore|warn}] [--] src1 ... srcN directory
GSCD601 is available for processing
Usage: mv [-I] [ -d| -e] [-i | -f] [-E{force|ignore|warn}] [--] src target
or: mv [-I] [-i | -f] [-E{force|ignore|warn}] [--] src1 ... srcN directory
$
I can execute the mv command manually on each file with success. Do you see anything off here?
File names I'm trying to rename:
GSCD6012017TEST.TXT
AWID6012017TEST.TXT
I had this behaviour in HPUX. We had the understanding that if multiple source files were specified, then the last one mentioned would be overwritten with the penultimate one, however HPUX insisted that multiple files had to be copied to a directory.
So:-
AIX/RHEL etc.
cp a b c d e f # Create/Overwrite f with e or copy all into directory f
HPUX
cp a b c d e f # Errors unless f is a directory
I can see arguments for both designs, but I think HPUX is probably correct because it is strict. Not that I enjoyed having to recode chunks of scripts as we migrated ........ :rolleyes:
10/10/17
StartTime:
06:19:17 AM
1009
2017
AWID601 is available for processing
mv AWID6012017*.TXT AWID6011009.TXT
GSCD601 is available for processing
mv GSCD6012017*.TXT GSCD6011009.TXT
$
Does that look weird? I can't see anything out of the ordinary...
---------- Post updated at 06:27 AM ---------- Previous update was at 06:21 AM ----------
Also, I'm not trying to move multiple files into 1.
GSCD6012017TEST.TXT transforming in GSCD6011009.TXT
AWID6012017TEST.TXT transforming into AWID6011009.TXT
Well, suggesting to echo the mv wasn't my brightest - it was obvious what the result would be!
I can only suggest that the AWID6012017*.TXT returns multiple files, and you need to iterate through them otherwise you're trying to move multiple files into a single one, and mv takes a source and a target, and as the target is not a directory is this case, it's complaining.
Something like:
for A in AWID601 GSCD601; do
for F in $A$CR_YR*.TXT; do
echo mv $F ${F/$A$CR_YR/$A$ydate}
done
done
A test:
ydate=`TZ=aaa24 date +%m%d`
CR_YR=$(date "+%Y")
# create some test files
for c in {1..5}; do
for A in AWID601 GSCD601; do
touch $A$CR_YR$RANDOM.TXT
done
done
for A in AWID601 GSCD601; do
for F in $A$CR_YR*.TXT; do
echo mv $F ${F/$A$CR_YR/$A$ydate}
done
done
mv AWID601201715991.TXT AWID601100915991.TXT
mv AWID601201721628.TXT AWID601100921628.TXT
mv AWID601201727511.TXT AWID601100927511.TXT
mv AWID601201730768.TXT AWID601100930768.TXT
mv AWID6012017823.TXT AWID6011009823.TXT
mv GSCD601201720182.TXT GSCD601100920182.TXT
mv GSCD601201724525.TXT GSCD601100924525.TXT
mv GSCD601201724813.TXT GSCD601100924813.TXT
mv GSCD60120175060.TXT GSCD60110095060.TXT
mv GSCD60120177596.TXT GSCD60110097596.TXT
Yes, that was exactly it. The directory is massive and I didn't realize there were other similarly named files out there. What I have done is create an archive process to be executed once the processing is complete.
Then when the ftp process lands the new files, there wont be any conflicts.
My code is as follows:
Archive() {
cd /hypbin/Oracle/Middleware/user_projects/epmsystem1/EssbaseServer/essbaseserver1/app/dailyinv/dailyinv
_ARCHIVEPATH=Archives/AWI_GSC_Archives/${CR_YR}_${ydate}/
mkdir -p "${_ARCHIVEPATH}"
for A in GSCXMITINV AWIXMITINV
do
if ls ${A}* 1> /dev/null 2>&1
then
echo "$A is available for processing"
mv ${A}* "${_ARCHIVEPATH}"
else
echo "$A does not exist - file will not be archived"
fi
done
cd /hypbin/Oracle/Middleware/user_projects/epmsystem1/EssbaseServer/essbaseserver1/app/item/itmsales
_ARCHIVEPATH=Archives/AWI_GSC_Archives/${CR_YR}_${ydate}/
mkdir -p "${_ARCHIVEPATH}"
for A in AWID601 GSCD601
do
if ls ${A}* 1> /dev/null 2>&1
then
echo "$A is available for processing"
mv ${A}* "${_ARCHIVEPATH}"
else
echo "$A does not exist - file will not be archived"
fi
done
}
cd /hypbin/Oracle/Middleware/user_projects/epmsystem1/EssbaseServer/essbaseserver1/app/dailyinv/dailyinv
for A in GSCXMITINV AWIXMITINV
do
if ls ${A}${CR_YR}* 1> /dev/null 2>&1
then
echo "$A is available for processing"
mv ${A}${CR_YR}*.TXT ${A}${ydate}.TXT
else
echo "$A does not exist - data import process aborted"
exit 1
fi
done
cd /hypbin/Oracle/Middleware/user_projects/epmsystem1/EssbaseServer/essbaseserver1/app/item/itmsales
for A in AWID601 GSCD601
do
if ls ${A}${CR_YR}* 1> /dev/null 2>&1
then
echo "$A is available for processing"
mv ${A}${CR_YR}*.TXT ${A}${ydate}.TXT
else
echo "$A does not exist - data import process aborted"
exit 1
fi
done
cd /hypbin/Oracle/Middleware/user_projects/epmsystem1/EssbaseServer/essbaseserver1/scripts/tivoli/dailysales
perl 2passdatechange.pl
sleep 60
startMaxl.sh oraclez.mxl ${CR_YR}
#::-- Archive data files after execution --::#
Archive