Bash 将以前的文件和新文件合并在一起,并将mv转换为临时文件。
我正在努力做到以下几点:Bash 将以前的文件和新文件合并在一起,并将mv转换为临时文件。,bash,shell,Bash,Shell,我正在努力做到以下几点: set -x substring() { VAR=$1 OFFSET=$2 LENGTH=$3 RET_VAL=${VAR:$OFFSET:$LENGTH} } # $1 filename # Change to PF Gazetteer directory cd $CARRIER_PF_UPDATES_DIR LOG=log.txt DownloadedFile=$1 OldFile= DATE=$(date +"%Y-%m-%
set -x
substring()
{
VAR=$1
OFFSET=$2
LENGTH=$3
RET_VAL=${VAR:$OFFSET:$LENGTH}
}
# $1 filename
# Change to PF Gazetteer directory
cd $CARRIER_PF_UPDATES_DIR
LOG=log.txt
DownloadedFile=$1
OldFile=
DATE=$(date +"%Y-%m-%d-%H:%M:%S")
RET=0
if [ "${2+1}" == "1" ]
then
echo "Date: " $DATE > $LOG
echo "filename: " $DownloadedFile >> $LOG
fi
substring ${DownloadedFile} -3 3
extension=$RET_VAL
old_ext=$((${extension}+1))
substring ${DownloadedFile} 0 9
echo $RET_VAL
oldFile="${RET_VAL}${old_ext}"
#oldFile=`printf "%02d" ${RET_VAL}`
#printf -v oldFile %02d "$RET_VAL"
#printf -v oldFile %02d "$((10#$RET_VAL - 1))"
extension=${1##*.}
printf -v decr "%s.%0${#extension}d" "${1%.*}" "$((10#$extension - 1))" \
&& cat -- "$decr" "$1" > temp \
&& rm -- "$decr" \
&& mv -- temp "$1"
oldFile="${oldFile}${old_ext}"
echo $oldFile
# move any temporary files if they exist
mv "${DownloadedFile}~" ${DownloadedFile}
# check to see if we got a file
result=$(grep 226 run.ilog)
if [ "${2+1}" == "1" ]
then
echo "grep found: " $result >> $LOG
fi
if [ -e "${DownloadedFile}" ]
then
#add back onto filename
#store back onto var = $OldFile
#Check if OldFile exist
#Cat files together and - Cat oldFile DownloadedFile > tempFile
echo ""
fi
if [ "$result" == "" ]
then
# File not found
RET=100
else
RET=10
# START F4202
sorted=$(sort -t'+' -k7 ${fileName} > ${fileName}.sorted)
if [ -e "${fileName}.sorted" ]
then
mv "${fileName}" "unsorted/${fileName}.unsorted"
mv "${fileName}.sorted" ${fileName}
fi
# END F4202
fi
if [ "${2+1}" == "1" ]
then
echo "script ret: " $RET >> $LOG
fi
exit $RET
获取上一个文件名(如果存在)-我已经这样做了
将这两个文件分类为临时文件,即filename.002、filename.003>>临时文件
mv下载文件到某个地方,或者删除它
mv temp以更正文件名
我已经做了以下工作:
set -x
substring()
{
VAR=$1
OFFSET=$2
LENGTH=$3
RET_VAL=${VAR:$OFFSET:$LENGTH}
}
# $1 filename
# Change to PF Gazetteer directory
cd $CARRIER_PF_UPDATES_DIR
LOG=log.txt
DownloadedFile=$1
OldFile=
DATE=$(date +"%Y-%m-%d-%H:%M:%S")
RET=0
if [ "${2+1}" == "1" ]
then
echo "Date: " $DATE > $LOG
echo "filename: " $DownloadedFile >> $LOG
fi
substring ${DownloadedFile} -3 3
extension=$RET_VAL
old_ext=$((${extension}+1))
substring ${DownloadedFile} 0 9
echo $RET_VAL
oldFile="${RET_VAL}${old_ext}"
#oldFile=`printf "%02d" ${RET_VAL}`
#printf -v oldFile %02d "$RET_VAL"
#printf -v oldFile %02d "$((10#$RET_VAL - 1))"
extension=${1##*.}
printf -v decr "%s.%0${#extension}d" "${1%.*}" "$((10#$extension - 1))" \
&& cat -- "$decr" "$1" > temp \
&& rm -- "$decr" \
&& mv -- temp "$1"
oldFile="${oldFile}${old_ext}"
echo $oldFile
# move any temporary files if they exist
mv "${DownloadedFile}~" ${DownloadedFile}
# check to see if we got a file
result=$(grep 226 run.ilog)
if [ "${2+1}" == "1" ]
then
echo "grep found: " $result >> $LOG
fi
if [ -e "${DownloadedFile}" ]
then
#add back onto filename
#store back onto var = $OldFile
#Check if OldFile exist
#Cat files together and - Cat oldFile DownloadedFile > tempFile
echo ""
fi
if [ "$result" == "" ]
then
# File not found
RET=100
else
RET=10
# START F4202
sorted=$(sort -t'+' -k7 ${fileName} > ${fileName}.sorted)
if [ -e "${fileName}.sorted" ]
then
mv "${fileName}" "unsorted/${fileName}.unsorted"
mv "${fileName}.sorted" ${fileName}
fi
# END F4202
fi
if [ "${2+1}" == "1" ]
then
echo "script ret: " $RET >> $LOG
fi
exit $RET
但是,当我运行此命令时,当我键入FileName.005时,我会在终端中收到以下消息
应该发生的是
1我键入一个文件名,即Filename.005。它检查文件名是否存在
2从文件名为Filename.004的文件中获取递减的旧文件
3然后将内容汇总成一个文件
我做得对吗。请原谅我犯的任何错误,因为我对bash还不熟悉 问题是${DownloadedFile}~不存在,因此移动失败。在移动之前,您应该首先检查它是否存在
[ -e "${DownloadedFile}~" ] && mv "${DownloadedFile}~" "${DownloadedFile}"
好的,如果它检查移动是否存在,应该会清除其中一些错误?这确实有效,但是,我仍然保留了剩余的:cat:FileName.004:没有这样的文件或目录cat:FileName.005:没有这样的文件或目录FileName.005和FileName.004存在吗?当我运行bash文件时,我键入FilenName.005并收到以下信息:错误显示FileName.005和FileName.004不存在。应该吗?