используйте команду tee для перенаправления вывода в файл в несуществующем каталоге

Я пытаюсь использовать команду tee для перенаправления вывода в файл, и я хочу, чтобы файл был создан в dir, который еще не создан.

date | tee new_dir/new_file

когда new_dir нет, команда tee не говорит

тройник: new_dir/new_file: нет такого файла или каталога

Если я создаю new_dir до запуска команды tee, то он работает нормально, но по какой-то причине я не хочу создавать new_dir вручную, возможно ли создайте new_dir с помощью команды tee ?

5 ответов


нет. Вам нужно будет создать каталог перед запуском tee.


заменить tee С функцией, которая создает каталог для вас:

tee() { mkdir -p ${1%/*} && command tee "$@"; }

Если вы хотите, чтобы функция работала при вызове с помощью простого имени файла:

tee() { if test "" != "${1%/*}"; then mkdir -p ${1%/*}; fi &&
   command tee ""; }

mkdir ./new_dir && date | tee ./new_dir/new_file

так как это tee команда, она одновременно записывает оба в new_file и stdout


Мда... После некоторых экспериментов я нашел кое-что интересное.

прежде всего, давайте попробуем коснуться некоторого файла:

touch ~/.lein/profiles.clj

он работает нормально. Но давайте использовать то же самое с кавычками:

touch "~/.lein/profiles.clj" # => touch: cannot touch ‘~/.lein/profiles.clj’: No such file or directory

Итак, для моей функции bash:

append_to_file() {
  echo  | tee -a 
}

после этого я сменил звонок с него:

append_to_file '~/.lein/projects.clj' '{:user {:plugins [[lein-exec "0.3.1"]]}}'

к нему (первый аргумент без кавычек):

append_to_file ~/.lein/projects.clj '{:users {:plugins [[lein-exec "0.3.1"]]}}'

и все хорошо.

обновление

в этом случае считает .lein в существующий каталог.


Я недавно обнаружил, что tee на самом деле создает файл если он не существует.

например, выполните следующую команду в пустую директорию:

echo "test creating file with tee" | tee tee_test.txt

он будет создавать tee_test.txt и поставить "test creating file with tee" в нем.

Я использую Linux Mint 17.3.