Comment puis-je copier un répertoire et le renommer dans la même commande?

15

Actuellement, j'exécute ces deux commandes pour créer une sauvegarde rapide du répertoire. Existe-t-il un moyen de combiner les deux commandes en une seule, de sorte que je copie et renomme le nouveau répertoire en une seule commande?

#cp -R /tf/Custom_App /tf/Custom_App_backups/
#mv /tf/Custom_App_backups/Custom_App /tf/Custom_App_backups/Custom_App_2017-12-21
AllisonC
la source
1
cp -R /tf/Custom_App /tf/Custom_App_backups/Custom_App_2017-12-21
jesse_b
Que diriez-vous de définir un alias ou une fonction pour ces deux choses;)
LinuxSecurityFreak

Réponses:

21

Vous devriez pouvoir faire juste

cp -R /tf/Custom_App /tf/Custom_App_backups/Custom_App_2017-12-21

Cependant , si le répertoire cible existe déjà, cela ajouterait la dernière partie du chemin source au chemin de destination, créant /tf/Custom_App_backups/Custom_App_2017-12-21/Custom_App, puis copiant le reste de l'arborescence à l'intérieur.

Pour éviter cela, utilisez /tf/Custom_App/.comme source. Bien sûr, dans ce cas, vous voudrez peut-être d' rm -r /tf/Custom_App_backups/Custom_App_2017-12-21abord, si vous ne voulez pas que des fichiers plus anciens se trouvent là après la copie.

La différence entre /some/diret a /some/dir/.été discutée il y a quelque temps dans cp se comporte bizarrement quand. (point) ou .. (point point) sont le répertoire source

ilkkachu
la source
Une alternative au passage en .tant que répertoire source consiste à utiliser l' -Tindicateur pour indiquer cpd'écraser la destination plutôt que de créer un nouveau membre à l'intérieur.
Toby Speight
@TobySpeight, ... dans GNU cp.
ilkkachu
1
L' /tf/Custom_app/.astuce est exactement ce dont j'avais besoin.
Martin Bonner soutient Monica le
cp -afonctionne également.
flow2k
1
@ flow2k, les utilitaires GNU en particulier ont beaucoup d'options non standard, dont beaucoup sont très utiles. cp -aBien sûr, apparaît également dans FreeBSD et OpenBSD, mais ce n'est toujours pas une fonctionnalité standard, c'est-à-dire non spécifiée par POSIX . ( cp -Tqui a été mentionné plus tôt semble être un GNUisme, ce n'est pas dans POSIX, et pas dans les BSD pour autant que je puisse voir.)
ilkkachu
1

Alternativement, vous pouvez le faire comme suit:

mkdir /tf/Custom_App_backups/Custom_App_2017-12-21 # prepare the target location
cp -R /tf/Custom_app/. /tf/Custom_App_backups/Custom_App_2017-12-21 # copy only the contents

Cela vous permettra de spécifier votre emplacement personnalisé à l'avance. Notez également qu'il utilise le suffixe /.Cela vous permet de copier uniquement le contenu et d'exclure son dossier contenant - dans ce cas, il s'agit du Custom_appdossier.

Abel Melquiades Callejo
la source