Comme d'autres l'ont mentionné, un répertoire est en fait un autre type de fichier (par opposition à un fichier normal), qui "contient" (pointe vers) d'autres fichiers. Il peut contenir des sous-répertoires, pour lesquels la même chose s'applique...
Ainsi, si vous copiez un répertoire (du point de vue de l'utilisateur), vous copiez en réalité un tas de fichiers (du point de vue du système de fichiers) (fichiers normaux, fichiers de répertoire, liens symboliques, ...) et pour chaque fichier de répertoire, vous répétez ce processus de manière récursive. Comme la copie d'un répertoire est par définition un processus récursif, l'argument de cp est appelé --recursive
.
Il est bien sûr très facile de créer un raccourci de commande dans votre environnement utilisateur (mettez-le dans votre fichier .profile/.bashrc pour qu'il soit disponible en permanence) :
alias cpr='cp -r'
Ou peut-être mieux :
alias cpa='cp -av'
Ainsi, vous pouvez copier un répertoire en utilisant cpa dir1 copyDir1
et il n'imprimera pas seulement ce qui est copié, mais appliquera également les autorisations de fichiers.
Et puisque quelqu'un a mentionné que cp pourrait théoriquement détecter que le fichier source est un répertoire et demander s'il doit le copier récursivement, voici une suggestion rapide :
cp()
{
if [ ! -e "$1" ]; then
echo missing source file
return 1
fi
arg="-d --preserve=all -v"
if [ -d "$1" ]; then
read -p "Copy directory recursively? " -n 1 -r
if [ "$REPLY" == "y" ]; then
arg="$arg -r"
fi
echo
fi
/usr/bin/cp $arg "$@"
}
Ce n'est qu'un emballage bon marché. Il préserve toujours toutes les méta-données (c'est-à-dire qu'il copie l'heure de modification du fichier, copie correctement les liens symboliques, etc.) et si vous essayez de copier un répertoire, il vous demande s'il doit le copier (de manière récursive).