このコマンドを使用して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'