Извлечение подкаталога -на основе сопоставления шаблона из пути и создание символических ссылок

Отношения между двумя пакетами следующие:

  • cgroup-binзависит от cgroup-tools;
  • cgroup-toolsломает и заменяет старые версии cgroup-bin.

Последние не являются зависимостями, но apt-cache rdependsучитывают их по умолчанию; чтобы увидеть только строгие зависимости, вам нужно запустить

apt-cache rdepends --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances cgroup-bin

, который показывает только mininet.

Ваша команда apt removeговорит, что cgroup-toolsне потребуется после удаления cgroup-bin; это имеет смысл, поскольку cgroup-binзависит от cgroup-tools. Если бы cgroup-toolsзависело от cgroup-bin, apt remove cgroup-binзаставило бы удалить cgroup-toolsтоже (и попросило бы вас об этом ); это не будет означать, что cgroup-toolsбольше не требуется, это будет означать, что удаление cgroup-binтребует удаления cgroup-tools, и оба пакета появятся после The following packages will be REMOVED:.

Итак, все ваши команды дают ожидаемые результаты, и в этом нет противоречия :ничего не зависит от cgroup-bin, поэтому его можно удалить.

Причина, по которой deborphanперечисляет cgroup-binв качестве кандидата на удаление, заключается в том, что cgroup-binтеперь является переходным пакетом :, он ничего не содержит, он только обеспечивает втягивание cgroup-tools; cgroup-tools— интересный пакет. (Вам необходимо пометить cgroup-toolsкак установленный вручную с помощью apt-mark manual.)

0
15.09.2021, 04:27
2 ответа

Можно сделать это сразу в процессе поиска файлов:

find Dir/ -name '*.gz' -regex '.*/ZRT[^/]*_[0-9]+/.*' -exec \
bash -c ': "$(grep -o "/ZRT[^/]*_[0-9]\+/" <<<"$0")";\
mkdir -p "${_#/}"; ln -s "$0" "${_#/}"' {} \;
1
15.09.2021, 11:22

Относительноtmp=$(find $Some_Dir -name "*.gz"):

  1. Всегда заключайте переменные оболочки в кавычки, то есть "$Some_Dir", а не только $Some_Dir, см.https://mywiki.wooledge.org/Quotes.
  2. Не считывайте имена файлов в скалярную переменную, так как становится намного сложнее работать с пробелами в именах файлов, если вы читаете их в массив.

так и должно быть:

readarray -d '' files < <(find "$Some_Dir" -type f -name '*.gz' -print0)

Теперь вы можете просто зацикливаться на файлах, чтобы делать все, что хотите, например. так как вы сказалиI want to match the pattern starting with ZRT and ending with _somenumber:

re='ZRT.*_somenumber'
for file in "${files[@]}"; do
    if [[ $file =~ $re ]]; then
        do whatever you like
    fi
done

Очевидно, вам НЕ НУЖЕН массив файлов в первую очередь, вы можете просто зациклить прямо на выходеfind:

re='ZRT.*_somenumber'
while IFS= read -r -d '' file; do
    if [[ $file =~ $re ]]; then
        do whatever you like
    fi
done < <(find "$Some_Dir" -type f -name '*.gz' -print0)
1
15.09.2021, 13:25

Теги

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