Скажем, каталог ~/this_dir
не существует.
Я должен смочь работать touch ~/this_dir/new.txt
создать new.txt
в ~/this_dir
.
Существует ли простой способ заставить касание также создать каталог?
Или альтернативная команда, которая достигла бы того же самого?
Спасибо
Существует команда install
который выполнит то, что Вы просите.
install -Dv /dev/null this_dir/new.txt
(источник: команда Bash для создания нового файла и его родительских каталогов при необходимости)
Объяснение:
install
используется, чтобы скопировать файлы и установить атрибуты (см. man install
)-D
говорит команде "создавать все ведущие компоненты DEST кроме последнего, или все компоненты - целевой каталог, затем копировать ИСТОЧНИК в DEST" -v
причины показать каждый шаг создания (может быть опущен, конечно), /dev/null
источник, от того, где скопировать this_dir/new.txt
цель операции копии.@rchard2scout к счастью указал на это
Команда установки является частью GNU Coreutils, который был отмечен как "Важный". Это означает, что в основном всегда будет доступно.
Я рекомендовал бы использование &&
.
Пример:
mkdir ~/this_dir && touch ~/this_dir/new.txt
&&
соглашения принимают новую команду. Так mkdir this_dir
, также сделайте остальных.
Это очень полезно, потому что может использоваться для всего, не только для новых папок.
Простое решение, данное $file
как файл, это должно работать:
mkdir -p $(dirname $file) && touch $file
или даже
# create function
touchfile ()
{
# to make directory there
mkdir -p $(dirname $1)
# and touch the file
touch $1
}
# then just
touchfile /path/to/file/to/touch/woah
Править: как указано @wjandrea, существуют многочисленные улучшения, которые будут сделаны; посмотрите на его суть и использование это.