touch não é capaz de criar diretórios, você precisa de mkdir para isso.
No entanto, mkdir tem a útil opção -p / --parents , que cria uma estrutura de diretório completa.
De man mkdir :
-p, --parents
no error if existing, make parent directories as needed
Assim, o comando que você precisa em sua situação específica é:
mkdir -p ~/Desktop/a/b/c/d/e/f/g/h/ && touch ~/Desktop/a/b/c/d/e/f/g/h/1.txt
Se você acha que precisará disso com mais frequência e não quiser digitar o caminho duas vezes toda vez, também pode criar uma função Bash ou um script para ela.
-
Função Bash (anexe esta linha a
~/.bashrcpara que ela fique disponível para seu usuário, caso contrário, ela desaparecerá novamente quando você sair do seu terminal):touch2() { mkdir -p "$(dirname "")" && touch "" ; }Pode ser usado simplesmente assim:
touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt -
Script Bash (armazene em
/usr/local/bin/touch2usando sudo para disponibilizá-lo para todos os usuários, senão em~/bin/touch2apenas para seu usuário):#!/bin/bash mkdir -p "$(dirname "")" && touch ""Não se esqueça de tornar o script executável usando
chmod +x /PATH/TO/touch2.Depois disso, você também pode executá-lo assim:
touch2 ~/Desktop/a/b/c/d/e/f/g/h/1.txt