131 votes

Unix - créer le chemin des dossiers et des fichiers

Je sais que tu peux le faire mkdir pour créer un répertoire et touch pour créer un fichier, mais n'y a-t-il pas moyen de faire les deux opérations en une seule fois ?

Par exemple, si je veux faire ce qui suit lorsque le dossier other n'existe pas :

cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt

Erreur :

cp: cannot create regular file `/my/other/path/here/cpedthing.txt': No such file or directory

Quelqu'un a-t-il trouvé une fonction pour contourner ce problème ?

12voto

Jörg Beyer Points 2123

Vous pouvez le faire en deux étapes :

mkdir -p /my/other/path/here/
touch /my/other/path/here/cpedthing.txt

2voto

Barun Parichha Points 160
if [ ! -d /my/other ]
then
   mkdir /my/other/path/here
   cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt
fi

2voto

Fabian Rios Points 140

Comme je l'ai vu et testé dans un forum unix ceci résout le problème

ptouch() {
    for p in "$@"; do
        _dir="$(dirname -- "$p")"
        [ -d "$_dir" ] || mkdir -p -- "$_dir"
    touch -- "$p"
    done
}

1voto

tediffer3rd Points 11

Pas besoin de if then déclarations... vous pouvez le faire sur une seule ligne en utilisant le signe ;

mkdir -p /my/other/path/here;cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt

-- ou sur deux lignes --

mkdir -p /my/other/path/here
cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt

-- le -p empêche les retours d'erreur si le répertoire existe déjà (ce que je suis venu chercher ici :))

1voto

Todd Owen Points 4477

Dans le cas particulier (mais pas rare) où vous essayez de recréer la même hiérarchie de répertoires, cp --parents peut être utile.

Par exemple, si /my/long contient les fichiers sources, et my/other existe déjà, vous pouvez le faire :

cd /my/long
cp --parents path/here/thing.txt /my/other

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X