В первую очередь, я использовал бы шарик, чтобы не анализировать 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 цифрами долго.
Я постараюсь ответить на вопросы как можно кратко. Вопросы, которые вы спрашиваете, обычно рассматриваются в вводных курсах операционных систем в университетах, но предположим, что вы не взяли такого курса.
Выделение памяти для процессов пользователей очень желательно - не только защитить ядро от вредоносных программ пользователя, но и для защиты программ пользователей друг от друга. Это обычно называется виртуальной памятью . Это также облегчает реализацию пейджинга, который также желательно по другим причинам (более простая фрагментация, простые линкеры / погрузчики и т. Д.).
Прерывания (не все из которых контролируют приложение уровня пользователя). Отказ от обработки процессора также принимает «контроль», образуют процесс (например, a.g. ждут
и т. Д., Которые также системные вызовы). Ядро может принять решение о предъявлении заявления.
Это очень большой вопрос. Ядро с плохими реализованными системными вызовами уязвим. Способность писать на физическую память будет другим способом. Существуют и другие уязвимости, которые могут возникнуть из плотно реализованных инструкций (например, уязвимость Sysret в процессорах Intel).
Корневые привилегии не совпадают с привилегиями ядра. Приложение, работающее в качестве пользователем 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
.
Я знаю, что мы получим много ответов на этот вопрос. Но все же вы можете TRY это :):) :D
во время чтения -r строки; do mkdir -p "$line" ; done < file.txt
Попробуй этот однолинейный:
для i в $(cat foo.txt) ; do mkdir -p $i ; done
Это создаст дерево каталога/директории в текущем рабочем каталоге. Не массово (как во всех каталогах-построении-символично), но создание будет происходить один за другим.