我正在使用此命令在 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'