Assist With AWS CLI S3 Bucket/Folder File Search - amazon-web-services

I have several folders and only certain folders contain files with ".003" at the end of their name. These files do not have an extension.
I am interested in finding out:
The name of the containing folder any of those files ARE in (inside of the bucket) and possibly listed only once (no duplication)?
The name of the containing folder that those files are NOT in?
I know how to do a search for a file like so:
aws s3 ls s3://{bucket}/{folder1}/{folder2} --recursive |grep "\.003"
Are there CLI commands that can give me what I am looking for?
If this or something like this has been asked before please point me in the correct direction. My apologies if so! :)
Thank you for your time!

Related

Amazon S3 - Can prefixes include the start of the file name?

I have several types of files within an Amazon S3 bucket, all of which are in the same folder. There are three "types" of files that I wan't to apply different transition/delete days to, and all of their filenames start the same way. I am wondering if prefixes for files need to just address folders, or if they can include the start of the filename as well. For example, the files start with data_file_*, log_file_*, and error_file_*, if they are all in a folder files/, can I set a rule with the prefix being files/error_file_? If so, is that syntax correct?
Note that changing the directory structure is not an option for me, and the AWS documentation doesn't have any examples like this, or any related comments that I can find.
The use-case you describe is actually the only valid way to set lifecycle rules. S3 has no concept of "folders" (even though it looks like that in the AWS console). It only understands filenames that happen to have slashes in them. This is typical for object based store (S3), in contrast to file storage (your laptop).
So when creating lifecycle rules, include the full path of the object (files/error_file_). Then the rule will be applied to all files with that prefix.

AWS S3 - Use powershell to delete all files but keep the folders

I have a powershell script, that downloads all files form an S3 bucket, and then removes the files from the bucket. All the files I'm removing are stored in a subfolder in the S3 bucket, and I just want to delete the files but maintain the subfolders.
I'm currently using the following command to delete the files in S3 once the file has been downloaded from S3.
Remove-S3Object -BucketName $S3Bucket -Key $key -Force
My problem is that if it removes all the files in the subfolder, the subfolder is removed as well. Is there a way to remove the file, but keep the subfolder present using powerhsell. I believe I can do something like this,
aws s3 rm s3://<key_to_be_removed> --exclude "<subfolder_key>"
but not quite sure if that'll work.
I'm looking for the best way to accomplish this, and at the moment, my only option is to recreate the subfolder via the script if the subfolder not longer exists.
The only way to accomplish having an empty folder is to create a zero-length object which has the same name as the folder you want to keep. This is actually how the S3 console enables you to create an empty folder.
You can check this by running $ aws s3 ls s3://your-bucket/folderfoo/ and observing an output object having length of zero bytes.
See more on this topic here.
As already commented, S3 does not really have folders the way file systems do. The folders as presented by most S3 browsers are just generated based on the paths of the files/objects. If you upload an object/file named folder/file, the browsers will present folder as folder with file as a file in the folder. But technically, all that there is is the file/object folder/file. The folder does not exist on its own.
You can explicitly create a folder by creating an empty empty-named object with "in the folder": folder/. If you do that, it will appear the the folder exists even if there are no files in it. But if you do not do that, the virtual folder disappears once you remove all objects in the folder.
Now the question is whether your command removes even the empty named object representing the folder or not. I cannot tell that.

Find the sub directories sizes of GCP bucket

I have an gcp bucket and wanted to find the sizes of each sub directories with a depth of 2.
For example:
GCP bucket is : gs://gcp-bucket/
It has folders under it, in the below way
gs://gcp-bucket/city/a/
gs://gcp-bucket/city/b/
gs://gcp-bucket/city/c/
gs://gcp-bucket/city/d/
I wanted to find the size of each of the above folder structures from the Linux server. There are files under those folders but I want to find only the directory size but not the size of files under it.
I tried with gsutil commands but it is not working.
The option isn't available with gsutil du .... You need to build it.
In fact the reason is simple: directory doesn't exists in Cloud Storage. Only the files that matches the same prefix (the "directory path") are presented in the same "group" or "folder"

AWS CLI - A file containing items to be ignored for S3 copy or sync

Is it somewhat possible to have a file containing ignored files and folders during uploading items through AWS CLI.
It has an --exclude flag like mentioned here. However, the concept I seek is something like .gitignore or .dockerignore file rather than enlisting with a flag.
No, there is no in-built capability within the AWS Command-Line Interface (CLI) to support .ignore file capabilities.
I know it's not exactly what you are looking for but you could set an alias in your ~/.bash_profile something like:
alias s3_cp=`aws s3 cp --exclude "yadda, yadda, yadda"`
This would at least reduce the need to type them every time, even though it isn't in a concise file.
Edit: Here is a link that shows it doesn't look like the base config file supports what you are looking for. https://docs.aws.amazon.com/cli/latest/topic/s3-config.html

Find in S3 Specific files from User write back to respected user folder

The question is using Lambda function is it possible to look through an S3 bucket with User folder's for a specific file name (Ex: Test1.txt and Text2.txt) Inside the file is just random number. Then basically write back a text file into the grabbed file respected folder basically saying "Test1.txt and Test2.txt has been touched.". If possible in python.
Yes! Use Amazon's AWS SDK. Here's an example for downloading a file from S3. The API for listing files and uploading files is pretty similar.