Как скопировать файл из подкаталога в соседний подкаталог?

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

Теперь ответьте на вопросы, которые вы только что упомянули.

1. Почему не происходит подкачка памяти несмотря на 'vm.swappiness=100'?

Во-первых, вы должны знать, как работает своп в Linux. Когда ядро ​​считает, что памяти недостаточно, есть два способа освободить память, чтобы облегчить ситуацию.

  1. замена анонимных страниц
  2. восстановить кэшированные страницы

и 'vm.swappiness' просто контролируют, насколько агрессивно ядро ​​будет подкачивать страницы памяти (выгружать больше анонимных страниц или восстанавливать больше кэшированных страниц)

Итак, возникает еще один вопрос: как ядро ​​определяет, какая анонимная страница должна быть заменена? Стратегия сложная, вы можете сослаться на коды здесь в соответствии с вашей версией ядра. Кратко опишите стратегию в одном предложении, замените самые неактивные страницы. Что делать, если нет неактивной страницы, которую, по мнению ядра, можно было бы подкачать?

Вот почему ваша система не выгружает столько памяти, сколько вы думали.

2. Помогает ли принудительная подкачка памяти?

Нет. И нет общепринятого способа принудительной подкачки памяти, ее берет на себя ядро.

0
21.05.2020, 09:57
2 ответа

Я считаю, что это именно та иерархия, которую вы ищете

scratch/
└── srnaik
    └── MyPDB
        ├── 5rea
        │   ├── MD
        │   │   └── production_10ns.out
        │   └── analysis
        │       └── production_10ns.out
        ├── 5res
        │   ├── MD
        │   │   └── production_10ns.out
        │   └── analysis
        │       └── production_10ns.out
        └── 5rez
            ├── MD
            │   └── production_10ns.out
            └── analysis
                └── production_10ns.out

Если это так, этот скрипт поможет,

#!/bin/bash

cd /scratch/srnaik/MyPDB

for i in {a..z}; do
    [ -d "5re${i}" ] && cp 5re${i}/MD/production_10ns.out 5re${i}/analysis/
done
1
18.03.2021, 23:34

В вашем коде есть две проблемы:

  1. Переменные обычно не могут содержать точку (вы используете production_10ns.outв качестве имени переменной в цикле for).
  2. Вы не можете копировать файл в несколько каталогов одновременно с помощью cp, что вы, похоже, делаете, используя шаблон подстановки в качестве пути назначения.

Вместо этого переберите все production_10ns.outфайлы и скопируйте их в новое место:

for pathname in /scratch/srnaik/MyPDB/*/MD/production_10ns.out; do
    cp "$pathname" "${pathname%/*}/../analysis"
done

Здесь "$pathname"будет абсолютным путем к файлу production_10ns.outв каждой итерации.

Расширение ${pathname%/*}удалит фактическое имя файла в конце имени пути, так что если $pathnameравно /scratch/srnaik/MyPDB/5rea/MD/production_10ns.out, то ${pathname%/*}будет заменено на /scratch/srnaik/MyPDB/5rea/MD.

Вы также можете использовать $( dirname "$pathname" )вместо${pathname%/*}:

for pathname in /scratch/srnaik/MyPDB/*/MD/production_10ns.out; do
    cp "$pathname" "$( dirname "$pathname" )/../analysis"
done

../analysisв конце пути назначения находит одноуровневый каталог analysis.

Если предположить, что этот каталог существует, команда cpскопирует в него файл.

Чтобы убедиться, что целевой каталог существует, используйте

mypdb_dir=/scratch/srnaik/MyPDB

for pathname in "$mypdb_dir"/*/MD/production_10ns.out; do
    [ ! -f "$pathname" ] && continue

    targetdir=$( dirname "$pathname" )/../analysis
    mkdir -p "$targetdir" || exit 1

    cp "$pathname" "$targetdir"
done

Это приведет к созданию целевого каталога, если он еще не существует, или выходу из оболочки, если не удалось создать каталог.

Я также явно проверяю, действительно ли файл, который мы сейчас исследуем, существует и является ли он обычным файлом, сначала (с помощью -fтеста ). Если шаблон, который мы итерируем, не соответствует ни одному файлу, он останется нерасширенным, и тест поймает этот сценарий.

Дополнительная переменная mypdb_dirдобавлена ​​просто для того, чтобы сделать код более аккуратным.

1
18.03.2021, 23:34

Теги

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