Je crée un script simple qui copie tous les fichiers de DIRECTORYA qui n'existent pas dans DIRECTORYB. Je fais cela en utilisant la commande cp:
cp -u DIRECTORYA/* DIRECTORYB
J'aimerais également envoyer un e-mail à un administrateur qui répertoriera les fichiers qui ont été copiés.
Donc, idéalement, avant d'exécuter la commande ci-dessus, j'aimerais obtenir les fichiers qui seront copiés et les stocker dans une variable pour une utilisation ultérieure lors de la création de mon message électronique.
Quelqu'un peut-il m'orienter dans la bonne direction? J'ai étudié l'utilisation de grep mais je ne pense pas que cela puisse être fait avec la commande cp?
-v
drapeau pour imprimer les noms de fichiers lors de leur copie? Redirigez cela vers un fichier ou directement dans une variable et utilisez-le pour créer votre message.cp
commande a une option--attributes-only
qui permet de ne pas copier les données des fichiers, mais simplement la structure des répertoires et des fichiers.variable=$(cp -v ...)
capture la sortie standard de cp. Voir gnu.org/software/bash/manual/html_node/Command-Substitution.htmRéponses:
Je ne pense pas que GNU
cp
ait quoi que ce soit pour vous aider si vous voulez voir ce qu'il ferait sans agir. Si vous souhaitez enregistrer les fichiers qui ont été modifiés, vous pouvez utiliser l'-v
option:Au lieu de
cp
, vous pouvez utiliser rsync , qui est beaucoup plus puissant et installé presque partout sauf pour les systèmes embarqués bas de gamme (et facile à installer là où il n'est pas présent par défaut).ou
la source
Si vous vouliez courir
cp foo*bar whatever
, courez à laecho foo*bar whatever
placela source
cp -u
et il cherche une option semblable à un essai à sec pour cp.Selon la page de manuel ,
c'est une fonctionnalité qui combine deux tests, un trivial à implémenter dans un script ( manquant ) et un nécessitant un peu de travail ( plus récent ). Vous pouvez créer un script qui indique ce qui est nécessaire à l'aide de
comm
,diff
ettest
.Aucun des
cp
utilitaires standard ne permet d'exécuter à sec une opération de copie. Comme suggéré,rsync
c'est la façon de le faire avec un utilitaire communément disponible. Bien sûr,rsync
est généralement utilisé pour copier sur la base de plus de critères que simplement les plus récents ou manquants (la taille du fichier et les horodatages sont également utilisés). Mais cela peut être réduit à faire justecp -u
.Pour les utilitaires non standard, il y a l'
copy
utilitaire que j'ai écrit (et bien sûr encore utilisé) à la fin des années 1980. Il a probablement été inspiré par l'make
utilitaire, car la première option que j'ai ajoutée était-n
.Pour l'exemple donné, il serait utilisé comme ceci:
Lectures complémentaires:
copy - utilitaire de copie de fichiers / répertoires
entrée du journal des modifications d' août 1988 :
la source
Vous pouvez utiliser la commande diff. J'ai un travail qui copie tous les jours des fichiers de sauvegarde. quelque temps j'ai besoin de vérifier si tous les fichiers sont copiés, voici la syntaxe:
et bien sûr si vous voulez les copier utilisez:
la source
Envisagez plutôt d'utiliser rsync. Rsync fonctionne parfaitement bien sur les copies locales et peut certainement faire ce que vous voulez, une fois que vous aurez parcouru les quinze options de gazillion dont il dispose.
vous montrera tout ce qui serait fait, et
le fera.
la source