Что самый быстрый путь состоит в том, чтобы создать список каталогов, указанных в файле?

В первую очередь, я использовал бы шарик, чтобы не анализировать ls и получать список .jpg файлы тем окольным способом. Во-вторых, можно использовать саму оболочку (никакая потребность в sed) извлечь компоненты даты:

shopt -s nullglob
for file in "$IMGDIR"/*.jpg; do
    file_name="$(basename file)"
    printf "%s\n" "$file_name"
    numbers="${file%-*}"
    year="${numbers%[0-9][0-9][0-9][0-9]}"
    monthday="${numbers#[0-9][0-9][0-9][0-9]}"
    month="${monthday%[0-9][0-9]}"
    day="${monthday#[0-9][0-9]}"
    movedir="$(date -d "$year-$month-$day" +"%Y/%m %b/)"
    movefile="$(date -d "$year-$month-$day" +"%Y/%m %b/%d)"
    [ -d "$ARCHIVEDIR/$movedir" ] || mkdir -p "$ARCHIVEDIR/$movedir"
    mv "$file" "$movefile"
done

Это предполагает, конечно, что Ваш date команда имеет достаточно полный набор функций, так как Вы упомянули, что это - отдельный исполняемый файл от BusyBox. Это также повредится, если Ваша строка даты не будет точно 8 цифрами долго.

2
29.08.2016, 16:18
3 ответа

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

  1. Выделение памяти для процессов пользователей очень желательно - не только защитить ядро ​​от вредоносных программ пользователя, но и для защиты программ пользователей друг от друга. Это обычно называется виртуальной памятью . Это также облегчает реализацию пейджинга, который также желательно по другим причинам (более простая фрагментация, простые линкеры / погрузчики и т. Д.).

  2. Прерывания (не все из которых контролируют приложение уровня пользователя). Отказ от обработки процессора также принимает «контроль», образуют процесс (например, a.g. ждут и т. Д., Которые также системные вызовы). Ядро может принять решение о предъявлении заявления.

  3. Это очень большой вопрос. Ядро с плохими реализованными системными вызовами уязвим. Способность писать на физическую память будет другим способом. Существуют и другие уязвимости, которые могут возникнуть из плотно реализованных инструкций (например, уязвимость Sysret в процессорах Intel).

  4. Корневые привилегии не совпадают с привилегиями ядра. Приложение, работающее в качестве пользователем root, все еще использует виртуальную память, все еще должен делать системные вызовы, по-прежнему должен подчиняться другим правилам, к которым применится любое приложение уровня пользователя.

Если вы хотите, чтобы я предоставил более подробную информацию о некоторых ответах, дайте мне знать.

Если кто-то может улучшить некоторые ответы, пожалуйста, не стесняйтесь указывать на это.

-121--50609-

С GNU Xargs :

xargs -d '\n' mkdir -p -- < foo.txt

xargs будет работать как можно меньше mkdir .

Со стандартным синтаксисом:

(export LC_ALL=C
 sed 's/[[:blank:]"\'\'']/\\&/g' < foo.txt | xargs mkdir -p --)

, где неэффективно, это то, что MKDIR -PA / B / C будет пытаться некоторые MKDIR («A») и, возможно, («А») и ЧДИР («А») и то же самое для «A / B» Даже если «A / B» существовало заранее Отказ

Если ваш Foo.txt имеет:

a
a/b
a/b/c

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

perl -lne 'mkdir $_ or warn "$_: $!\n"' < foo.txt

, которые избегают, вызывая (многие) команду mkdir .

10
27.01.2020, 21:50

Я знаю, что мы получим много ответов на этот вопрос. Но все же вы можете TRY это :):) :D

во время чтения -r строки; do mkdir -p "$line" ; done < file.txt

1
27.01.2020, 21:50

Попробуй этот однолинейный:

для i в $(cat foo.txt) ; do mkdir -p $i ; done

Это создаст дерево каталога/директории в текущем рабочем каталоге. Не массово (как во всех каталогах-построении-символично), но создание будет происходить один за другим.

-1
27.01.2020, 21:50

Теги

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