을 사용하여 파일이 S3 버킷에 있는지 확인합니다. 필요한 파일을 모두 성공적으로 업로드하는 프로그램이 있습니다. 업로드해야하는 파일이 매일 있습니다. 파일을 업로드 한 후에 더 이상 파일이 필요하지 않으므로 동기화 할 필요가 없습니다.s3cmd
s3cmd를 사용하여 S3 내에 경로 및 파일 이름이 있는지 확인하는 방법이 있는지 궁금합니다.
을 사용하여 파일이 S3 버킷에 있는지 확인합니다. 필요한 파일을 모두 성공적으로 업로드하는 프로그램이 있습니다. 업로드해야하는 파일이 매일 있습니다. 파일을 업로드 한 후에 더 이상 파일이 필요하지 않으므로 동기화 할 필요가 없습니다.s3cmd
s3cmd를 사용하여 S3 내에 경로 및 파일 이름이 있는지 확인하는 방법이 있는지 궁금합니다.
s3cmd에서 ls 명령을 사용하여 S3에 파일이 있는지 여부를 알 수 있습니다.
배쉬 코드
path=$1
count=`s3cmd ls $path | wc -l`
if [[ $count -gt 0 ]]; then
echo "exist"
else
echo "do not exist"
fi
사용법 : ./s3_exist.sh의 S3 :
편집 //foo/bar.txt : cocoatomo으로
댓글에서 지적 s3cmd ls $path
목록의 모든 파일 그 은$path
로 시작됩니다. 더 안전한 방법은 s3cmd info $path
을 사용하고 종료 코드를 확인하는 것입니다.
새로운 배쉬 코드
path=$1
s3cmd info $path >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo "exist"
else
echo "do not exist"
fi
그 bar.txt라는 및 bar.txt.bak 가정은 버킷 (S3)에 존재 : // foo는 "s3cmd의 LS의 S3를 : //foo/bar.txt"는 표시 다음 출력.
$ s3cmd ls s3://foo/bar.txt
2013-11-11 11:11 5 s3://foo/bar.txt
2013-11-11 11:11 5 s3://foo/bar.txt.bak
명령 결과에서 두 번째 줄을 제거해야하므로 "awk"명령을 사용하여 불필요한 줄을 필터링합니다.
$ filename=s3://foo/bar.txt
$ s3cmd ls ${filename} | awk "\$4 == \"${filename}\" { print \$4 }"
2013-11-11 11:11 5 s3://foo/bar.txt
마지막으로 모든 명령을 빌드합니다. AWS CLI의 최신 버전에서
filename=s3://foo/bar.txt
count=$(s3cmd ls ${filename} | awk "\$4 == \"${filename}\" { print \$4 }" | wc -l)
if [ $count -eq 0 ]; then
echo "file does not exist"
else
echo "file exists"
fi
, 당신은 파일이나 디렉토리의 존재를 감지하기 위해 다음과 같은 코드를 사용할 수 있습니다
count=$(aws s3 ls $path | wc -l)
if [ $count -gt 0 ]
then
(>&2 echo "$path already exists!")
return
fi
우리는 s3cmd의 LS를 사용하여 파일의 경우 하나의 플래그 flag_exists 사실이 걸릴 수 있습니다 파일이 없으면 거기에 있고 false입니다.
FLAG_EXISTS=false
for j in $(s3cmd ls s3://abc//abc.txt); do
if [[ "$j" == "s3://abc//abc.txt" ]]; then
FLAG_EXISTS=true
break
fi
done
if [ "$FLAG_EXISTS" = false ]; then
echo 'file not exists'
else
echo 'file exists'
fi
설명 - 유 abc.txt s3cmd 1!을 검색하는 경우, 그것은 그렇게 루핑 및 조건의 경우 경우 사용 확인, abc.txt abcd.txt 등과 같은 값을 반환 할 수 있습니다처럼 LS 많은 값을 반환 할 수 있기 때문에 파일이 존재.
그래서 count는 해당 디렉토리 내의 파일 수입니다. 이해합니다. 그러나 나는 -gt 부분을 뛰어 다니지 않았고 검색을 시도 할 때 아무 것도 찾을 수 없었습니다. 그 부분을 설명해 주시겠습니까? –
주어진 경로 및 파일 이름과 일치하는 파일 수를 센다. S3는 중복 파일 이름을 지원하지 않으므로이 수는 0 (파일 없음) 또는 1 (파일 존재)입니다. "-gt"는 "보다 큼"을 의미합니다. 이것이 더 명확한 경우 [[$ count -eq 1]]을 할 수도 있습니다. Bash의 조건식에 대한 자세한 내용은 다음을 참조하십시오. [link] (http://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html) –
"s3cmd ls"의 첫 번째 인수는 a를 의미합니다. 버킷 이름 또는 파일 이름이 아닌 버킷 이름 다음의 접두사 문자열. "s3cmd ls s3 : // foo/b"는 "s3 : //foo/bar.txt"가 있으면 "$ count -gt 0"은 s3 : // foo/b가 있는지 여부를 표시하지 않습니다. – cocoatomo