Есть ли программная разница между каталогами, созданными с помощью mktemp -d или mkdir?

Существует также FuseISO , драйвер файловой системы пользовательского пространства. Хотел бы я знать об этой опции несколько лет назад, потому что я тоже только что конвертировал их с помощью mdf2iso . Поскольку я предпочитаю сохранять исходные файлы, это сделано для беспорядка.

1
26.09.2018, 22:10
2 ответа

При использовании mkdirсценарий должен убедиться, что он создает каталог с несуществующим именем. Было бы ошибкой использовать mkdir dirname, если dirnameявляется существующим именем в текущем каталоге.

При создании временного каталога (т.е. каталога, который не нужен намного дольше, чем в течение времени жизни текущего скрипта ), имя каталога вообще не важно, а mktemp -dнайдет имя что еще не занято чем-то другим.

mktemp -dупрощает и делает более безопасным создание временного каталога. Без mktemp -dпришлось бы пытаться выполнить mkdirс несколькими именами, пока не получится одно из них. Это и излишне сложно, и может быть сделано неправильно (, что может привести к появлению в коде сложных условий гонки ).

mktempтакже дает пользователю сценария немного контроля над тем, где он хочет создать временный каталог. Если сценарий, например, создает огромное количество временных данных, которые должны храниться в этом каталоге, пользователь может установить переменную среды TMPDIR(до или во время вызова сценария ), чтобы она указывала на доступный для записи каталог в разделе, где достаточно свободного места. mktemp -dзатем создаст временный каталог по этому пути.

Если TMPDIRне установлено, вместо mktempбудет использоваться /tmp.

6
27.01.2020, 23:14

Проблема с mktemp -d, поскольку она создает временный каталог со случайным именем, :Вам нужно не забыть удалить каталог после его использования, если у вас есть строгая политика удаления временного каталога.

Вот почему вы написали scripttmp=$(mktemp -d)для сохранения значения. В целом он прост в использовании.

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

var=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1);
mkdir "/tmp/$var"
#some code
rm -rf "/tmp/$var"

Is there a programmatical difference between directories created with mktemp -d or mkdir?

Ну есть. С помощью mkdirвы создаете имя каталога, а с помощью mktemp -dсистема создает для вас каталог на основе /dev/urandomgettimeofday, getpid,... и других функций для обеспечения уникальности имени.

0
27.01.2020, 23:14

Теги

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