используйте команду 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() { 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.