Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/10/2010, à 13:29

boutor

[résolu] [BASH] mkdir -p pour les fichiers

Bonjour à tous,

D'habitude pour créer un fichier vide, je fais touch my_file
Hors dans le cas présent, je dois créer des fichiers avec une arborescence :
/opt/my/dir/my_file
J'ai des listes importantes de fichiers à créer.

Et le répertoire /my/dir n'existe pas.
Du coup touch /opt/my/dir/my_file, ne fonctionne pas.

Suis-je obligé de couper en deux?
mkdir -p  /opt/my/dir
touch  /opt/my/dir/my_file

Comment récupérer /opt/my/dir du coup? Avec cut ou sed, je merdoie...
Et je ne suis pas contre awk. smile

Merci pour toute aide

Dernière modification par boutor (Le 10/10/2010, à 14:21)

Hors ligne

#2 Le 10/10/2010, à 13:39

Vysserk3

Re : [résolu] [BASH] mkdir -p pour les fichiers

Je ne suis pas bien sûr d'avoir tout compris, mais tu peux faire une variable qui contiendra le nom du dossier et que tu pourras récupérer partout wink
dir="/opt/my/dir"
mkdir -p $dir
touch $dir/my_file

Hors ligne

#3 Le 10/10/2010, à 13:47

®om

Re : [résolu] [BASH] mkdir -p pour les fichiers

path="aaa/bbb/ccc.ddd"
dir="${path%/*}"
file="${path##*/}"
mkdir -p "$dir"
touch "$dir/$file"

Hors ligne

#4 Le 10/10/2010, à 13:49

kyncani

Re : [résolu] [BASH] mkdir -p pour les fichiers

Tu peux récupérer le nom du répertoire parent avec dirname. Deux outils utiles : basename et dirname pour récupérer respectivement le répertoire parent et le nom du fichier sans le nom du répertoire.

Hors ligne

#5 Le 10/10/2010, à 14:21

boutor

Re : [résolu] [BASH] mkdir -p pour les fichiers

basename et dirname fonctionnent parfaitement. Une solution simple à retenir.

Effectivement, je ne devais pas être clair. J'ai des fichiers textes contenant des listes de fichiers à créer. Je ne peux pas taper dir= pour chacun (humainement parlant smile ).

@Rom: je garde ta solution, mais pour d'autres contextes.

Merci à vous.

Hors ligne

#6 Le 10/10/2010, à 20:36

Totor

Re : [résolu] [BASH] mkdir -p pour les fichiers

Voilà qui redéfinit touch dans sa plus simple utilisation (donc sans les arguments) :
( à mettre dans son ~/.bashrc )

function touch
{
  (( $# > 0 )) && { 
  for arg
  do
    [[ "${arg}" = */* ]] && mkdir -p ${arg%/*}
  done
  }
  command touch "$@"
}
export -f touch

si tu souhaites pouvoir utiliser la version initiale de touch, il te faut :
- soit préciser le chemin complet
- soit définir un alias de la version initale
- soit modifier le nom de la fonction ci-dessus


-- Lucid Lynx --

Hors ligne