Как mkdir только если dir еще не существует?

Существует популярный метод, называемый отпечатком на холсте, описанным в этой научной статье: Веб никогда не забывает: механизмы постоянного слежения в дикой природе . Когда вы начнете искать его, вы будете удивлены, как часто он используется.

В статье также рассматриваются другие постоянные методы отслеживания, такие как evercookies, refawning http и Flash cookie, а также синхронизация файлов cookie.

Подробнее о снятии отпечатков пальцев здесь:

1660
задан Jahid 17 December 2015 в 09:21
поделиться

5 ответов

Попробуйте mkdir -p :

mkdir -p foo

Обратите внимание, что это также создаст любые промежуточные каталоги, которые не существуют ; например,

mkdir -p foo/bar/baz

создаст каталоги foo , foo / bar и foo / bar / baz , если они не существуют.

Некоторые реализация, подобная GNU mkdir , включает mkdir --parents как более читаемый псевдоним, но это не указано в спецификации POSIX / Single Unix и не доступно на многих распространенных платформах, таких как macOS, различных BSD и различные коммерческие Unix, поэтому этого следует избегать.

Если вы хотите получить ошибку, когда родительские каталоги не существуют, и хотите создать каталог, если он не существует, тогда вы можете test ] для существования каталога сначала:

[ -d foo ] || mkdir foo
2991
ответ дан 22 November 2019 в 20:06
поделиться

Или, если вы хотите сначала проверить существование:

if [[ ! -e /path/to/newdir ]]; then
            mkdir /path/to/newdir
fi

-e - это существующий тест для оболочки korn.

Вы также можете попробовать поискать руководство по оболочке korn.

1131827]

8
ответ дан 22 November 2019 в 20:06
поделиться

Старый проверенный и верный

mkdir /tmp/qq >/dev/null 2>&1

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

Иногда самые простые (и самые уродливые) решения являются лучшими.

19
ответ дан 22 November 2019 в 20:06
поделиться

Используйте флаг -p.

man mkdir
mkdir -p foo
82
ответ дан 22 November 2019 в 20:06
поделиться

Это должно работать:

$ mkdir -p dir

или:

if [[ ! -e $dir ]]; then
    mkdir $dir
elif [[ ! -d $dir ]]; then
    echo "$dir already exists but is not a directory" 1>&2
fi

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

157
ответ дан 22 November 2019 в 20:06
поделиться
Другие вопросы по тегам:

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