Как создать новый файл через касание, если это находится в каталоге, который не существует?

Скажем, каталог ~/this_dir не существует.

Я должен смочь работать touch ~/this_dir/new.txt создать new.txt в ~/this_dir.

Существует ли простой способ заставить касание также создать каталог?

Или альтернативная команда, которая достигла бы того же самого?

Спасибо

23
задан 25 November 2019 в 23:13

3 ответа

Существует команда 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, который был отмечен как "Важный". Это означает, что в основном всегда будет доступно.

42
ответ дан 21 December 2019 в 23:50

Я рекомендовал бы использование &&.

Пример:

mkdir ~/this_dir && touch ~/this_dir/new.txt

&& соглашения принимают новую команду. Так mkdir this_dir, также сделайте остальных.

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

20
ответ дан 21 December 2019 в 23:50

Простое решение, данное $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, существуют многочисленные улучшения, которые будут сделаны; посмотрите на его суть и использование это.

4
ответ дан 21 December 2019 в 23:50

Другие вопросы по тегам:

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