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'

関連情報