在 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'

相关内容