이 명령을 사용하여 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'