zip 파일을 별도의 디렉토리로 이동하고 압축을 풀면 됩니다.

zip 파일을 별도의 디렉토리로 이동하고 압축을 풀면 됩니다.

디렉토리가 있습니다/홈/우분투/업로드. zip 파일이 포함되어 있는지 확인해야 합니다. 포함된 경우 날짜를 기준으로 가장 오래 수정된 파일을/홈/우분투/임시. 그런 다음 받은 zip 파일의 압축을 풀어야 합니다. /홈/우분투/임시 명명된 사람에게/홈/우분투/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

관련 정보