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
~/.bashrc
para 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/touch2
usando sudo para disponibilizá-lo para todos os usuários, senão em~/bin/touch2
apenas 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