Bash - добавить ноль к одной цифре во время цикла

Вот сценарий, который делает это.

sudo apt-get install python-apt

и вы готовы к работе.

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

from __future__ import (absolute_import, division,
                        print_function, unicode_literals)
import apt
from apt.cache import Filter, FilteredCache

MB = 1024*1024

class InstalledFilter(Filter):
    def apply(self, pkg):
        return pkg.is_installed

def iter_base_deps(cache, package):
    deps = []
    version = package.installed
    for dep_type in ('Depends', 'PreDepends', 'Recommends'):
        deps.extend(version.get_dependencies(dep_type))
    for dep in deps:
        for base_dep in dep:
            if base_dep.name in cache:
                yield base_dep

def main():
    package_ref_count = {}
    results = []

    cache = FilteredCache(apt.Cache())
    cache.set_filter(InstalledFilter())
    for package in cache:
        for base_dep in iter_base_deps(cache, package):
            if base_dep.name in package_ref_count:
                package_ref_count[base_dep.name] += 1
            else:
                package_ref_count[base_dep.name] = 1

    for package in cache:
        base_deps_size = 0
        base_deps = []
        for base_dep in iter_base_deps(cache, package):
            if package_ref_count[base_dep.name] == 1:
                base_deps.append(base_dep)
                base_deps_size += cache[base_dep.name].installed.installed_size
        total_size = package.installed.installed_size + base_deps_size
        results.append((total_size, package, base_deps_size, base_deps))

    for total_size, package, base_deps_size, base_deps in sorted(results, reverse=True):
        if package.name in package_ref_count:
            continue
        if total_size < MB:
            break
        self_size = package.installed.installed_size
        base_dep_count = len(base_deps)
        print('{:.1f} MB  {}'.format(total_size/MB, package.name) + \
              (' with {} deps'.format(base_dep_count) if base_dep_count else ''))
        if base_dep_count:
            print('    {:.1f} MB  self'.format(self_size/MB))
            for base_dep in base_deps:
                size = cache[base_dep.name].installed.installed_size
                print('    {:.1f} MB  {}'.format(size/MB, base_dep.name))


if __name__ == '__main__':
    main()

Пример вывода:

[ f2]
2
задан 18 July 2017 в 15:10

6 ответов

Используя ваш скрипт, будет работать следующее:

#!/bin/bash
x=0
ep=1
while [ $x -le 11 ]
do
  ep_padded=$(printf '%02d' $ep)
  echo "Welcome $x times"
  date --date="$x week" +"%Y:%m:%d"
  exiftool -exififd:dateTimeOriginal="$(date --date="$x week" +"%Y:%m:%d") 00" $1$ep_padded*
  x=$(( $x + 1 ))
  ep=$(( $ep + 1 ))
done

Вы также можете использовать следующую форму для увеличения ваших переменных

x=$((++x))
ep=$((++ep))
2
ответ дан 22 May 2018 в 20:26
  • 1
    Пробовал это, но все еще получал ошибку в 08, и я понял, что каждый номер, начинающийся с 0 в bash, считается восьмеричным, а 08 не является восьмеричным номером vaild, я его исправил, явно объявив base 10, как $ ((10 # $ x)) вместо $ x – Solaris 18 July 2017 в 14:51
  • 2
    У переменной x нигде не должно быть отступов 0 перед этим, код, который вы используете, должен отличаться от того, что находится в этом ответе. – Arronical 18 July 2017 в 15:01
  • 3
    да, извините, я испортил lil во время тестирования, thnx ваш код работает отлично, я сожалею о своих ошибках и недостатке знаний – Solaris 18 July 2017 в 15:05
  • 4
    Не волнуйся @ Соларис, каждый должен где-то учиться. Изучение определения базы в арифметике bash - полезный урок, поэтому вы действительно узнали больше за небольшие ошибки! – Arronical 18 July 2017 в 15:09
  • 5
    я только узнал, потому что это сообщество помогает мне, я знаю c ++, но ошибки без помощи компилятора трудно остановить, так или иначе, чтобы дать вам время для решения моих проблем, я постараюсь сделать то же самое для кого-то еще – Solaris 18 July 2017 в 15:16

Используя ваш скрипт, будет работать следующее:

#!/bin/bash x=0 ep=1 while [ $x -le 11 ] do ep_padded=$(printf '%02d' $ep) echo "Welcome $x times" date --date="$x week" +"%Y:%m:%d" exiftool -exififd:dateTimeOriginal="$(date --date="$x week" +"%Y:%m:%d") 00" $1$ep_padded* x=$(( $x + 1 )) ep=$(( $ep + 1 )) done

Вы также можете использовать следующую форму для увеличения ваших переменных

x=$((++x)) ep=$((++ep))
2
ответ дан 18 July 2018 в 10:07

Используя ваш скрипт, будет работать следующее:

#!/bin/bash x=0 ep=1 while [ $x -le 11 ] do ep_padded=$(printf '%02d' $ep) echo "Welcome $x times" date --date="$x week" +"%Y:%m:%d" exiftool -exififd:dateTimeOriginal="$(date --date="$x week" +"%Y:%m:%d") 00" $1$ep_padded* x=$(( $x + 1 )) ep=$(( $ep + 1 )) done

Вы также можете использовать следующую форму для увеличения ваших переменных

x=$((++x)) ep=$((++ep))
2
ответ дан 24 July 2018 в 19:30

установите свою переменную, как показано ниже, это добавит нулевой пробел, вы можете добавить больше нулей в случае ваших ожиданий.

ep="$(printf '%02d' $((++ep)) )"
0
ответ дан 22 May 2018 в 20:26
  • 1
    Спасибо также жаль дублировать поток, я не мог найти вариант закрыть или удалить сообщение – Solaris 18 July 2017 в 10:29
  • 2
    Кажется, он не работает для меня, и, как я проверяю просмотр, хотя другие сообщения, возможно, printf вызывает проблемы – Solaris 18 July 2017 в 10:41
  • 3
    Для команды printf требуется '%02d' в качестве строки форматирования. – Arronical 18 July 2017 в 11:34
  • 4
    Да, спасибо, обновлено – αғsнιη 18 July 2017 в 11:51

установите свою переменную, как показано ниже, это добавит нулевой пробел, вы можете добавить больше нулей в случае ваших ожиданий.

ep="$(printf '%02d' $((++ep)) )"
1
ответ дан 18 July 2018 в 10:07

установите свою переменную, как показано ниже, это добавит нулевой пробел, вы можете добавить больше нулей в случае ваших ожиданий.

ep="$(printf '%02d' $((++ep)) )"
1
ответ дан 24 July 2018 в 19:30
  • 1
    Спасибо также жаль дублировать поток, я не мог найти вариант закрыть или удалить сообщение – Solaris 18 July 2017 в 10:29
  • 2
    Кажется, он не работает для меня, и, как я проверяю просмотр, хотя другие сообщения, возможно, printf вызывает проблемы – Solaris 18 July 2017 в 10:41
  • 3
    Для команды printf требуется '%02d' в качестве строки форматирования. – Arronical 18 July 2017 в 11:34
  • 4
    Да, спасибо, обновлено – αғsнιη 18 July 2017 в 11:51

Другие вопросы по тегам:

Похожие вопросы: