S3 버킷에서 특정 폴더 경로 찾기

S3 버킷에서 특정 폴더 경로 찾기

이 명령을 사용하여 s3 버킷에서 폴더를 검색하고 있습니다.

aws s3 ls s3://bucketname/dir1/dir2/dir3 --recursive | grep -i 'dir3'

결과는 다음과 같습니다.

dir1/dir2/dir3/1/aaa.txt 
dir1/dir2/dir3/1/bbb.txt
dir1/dir2/dir3/1/ccc.txt

그러나 다음과 같이 파일 경로가 필요합니다.

dir1/dir2/dir3

디렉토리 경로를 얻기 위해 불필요한 텍스트를 제거할 수 있습니다.

aws s3 ls s3://bucketname/dir1/dir2/dir3 --recursive | grep -i 'dir2' | head -n 1 | sed 's/1.*//'

그러나 이것은 grep의 여러 문자열 검색에는 작동하지 않습니다.

aws s3 ls s3://bucketname/dir1/dir2/dir3 --recursive | grep -i 'dir3\|folder3'

이런 출력이 필요합니다

dir1/dir2/dir3
folder1/folder2/folder3

답변1

다음을 수행할 수 있습니다.

for i in `aws s3 ls s3://bucketname/dir1/dir2/dir3 --recursive | grep -i 'dir3' `
do
dirname $i >>/tmp/file
done
sort -u /tmp/file >/tmp/file1

마지막으로 파일의 하위 디렉터리 목록을 얻을 수 있습니다./tmp/file1

답변2

작업을 통해 각 경로의 끝에서 파일 이름을 제거할 수 있습니다 sed. 그런 다음 을 사용하여 인접한 중복 항목을 제거할 수 uniq있으며, 인접하지 않은 중복 항목이 발생하는 경우 을 사용합니다 sort -u.

그런 다음 필요에 따라 결과를 검색할 수 있습니다.

aws s3 ls s3://bucketname/dir1/dir2/dir3 --recursive |
    sed 's![^/]*$!!' |
    uniq |
    grep -Ewi 'dir3|folder1'

관련 정보