ディレクトリがあります/ホーム/ Ubuntu /アップロード。 zipファイルが含まれていることを確認する必要があります。含まれている場合、日付に基づいて最も古い修正ファイル/ホーム/ Ubuntu/一時。その後、受信したzipファイルを解凍する必要があります。 /ホーム/ Ubuntu/一時 名前付きの人へ/ホーム/Ubuntu/s3。最後に、ファイルが正常に移動されたことを示す必要があります。
これが私がbashスクリプトでしたことです - >
#!/bin/bash
if [[ -z `ls -t /home/ubuntu/uploads/*.zip | tail -1` ]] ; then
echo 'No new zip file to move !'
exit
fi
TIME=`date +%Y-%m-%d_%H-%M-%S`
UPLOADS='/home/ubuntu/uploads'
TEMP='/home/ubuntu/temp'
BUCKET='/home/ubuntu/s3'
FILENAME=`ls -t /home/ubuntu/uploads/*.zip | tail -1 | xargs -n 1 basename `
FILEPATH=`ls -t /home/ubuntu/uploads/*.zip | tail -1`
cp $FILEPATH $TEMP
unzip -u $TEMP/"$FILENAME" -d $BUCKET
rm -rf $TEMP/*
mv /home/ubuntu/uploads/"$FILENAME" /home/ubuntu/uploads/"$FILENAME".success.$TIME
動作しますが、スペースを含むzipファイル名を処理できません。
誰もがより良い、改善されたバージョンを提案できる場合はお願いします。
答え1
動作します..すべてありがとう!
#!/bin/bash
# logs last error
#exec 3>&1 4>&2
#trap 'exec 2>&4 1>&3' 0 1 2 3
#exec 1>log.out 2>&1
# check for file names with space and rename
for file in /home/ubuntu/uploads/*' '*
do
if [ -e "${file// /_}" ]
then
printf >&2 '%s\n' "Warning, skipping $file as the renamed version already exists"
continue
fi
mv -- "$file" "${file// /_}"
done
# check for zip files
if [[ -z `ls -t /home/ubuntu/uploads/*.zip | tail -1` ]] ; then
echo 'No new zip file to move !'
exit
fi
# check for bad zip file and remove
shopt -s dotglob nullglob globstar
for file in /home/ubuntu/uploads/*.zip; do
[[ -r $file ]] || continue
unzip -t "$file" >/dev/null 2>&1 || rm -f "$file"
done
TIME=`date +%Y-%m-%d_%H-%M-%S`
UPLOADS='/home/ubuntu/uploads'
TEMP='/home/ubuntu/temp'
BUCKET='/home/ubuntu/s3'
FILENAME=`ls -t /home/ubuntu/uploads/*.zip | tail -1 | xargs -n 1 basename `
FILEPATH=`ls -t /home/ubuntu/uploads/*.zip | tail -1`
cp $FILEPATH $TEMP
unzip -u $TEMP/$FILENAME -d $BUCKET
rm -rf $TEMP/*
mv /home/ubuntu/uploads/"$FILENAME" /home/ubuntu/uploads/"$FILENAME".success.$TIME