Comment copier (style d'archivage où la date n'est pas modifiée) tous les fichiers d'un répertoire de sauvegarde dans le répertoire de l'utilisateur tout en renommant chaque fichier pour supprimer la partie chaîne aléatoire du nom (c'est-à-dire -2b0fd460_1426b77b1ee_-7b8e)?
cp de:
/backup/path/data/Erp.2014.02.16_16.57.03-2b0fd460_1426b77b1ee_-7b8e.etf
à:
/home/user/data/Erp.2014.02.16_16.57.03.etf
Chaque fichier commencera toujours par "Erp". suivi de la chaîne d'horodatage date-heure suivie de la chaîne aléatoire puis de l'extension ".etf". Je souhaite conserver tous les éléments de nom, y compris le cachet date-heure. Je veux juste supprimer la chaîne aléatoire.
La chaîne aléatoire permet plusieurs sauvegardes du même fichier. Cependant, dans ce cas, je viens d'exécuter fdupes et il n'y a pas de doublons. Je peux donc simplement restaurer tous les fichiers, en supprimant la chaîne aléatoire.
Je recherche une commande bash sur une ligne pour le faire.
Si cela ne fonctionne pas, je pourrais le faire en deux ou plusieurs étapes. J'utilise normalement KRename, mais dans ce cas, je dois le faire en bash. (Je travaille à distance.)
pax
. Cela ressemble à un outil très utile. Me fait me demander pourquoi ce n'est pas standard dans plus de distributions ...pax
est dans la base standard de Linux depuis 2005. De plus, l'alternative serait GNUcpio
, est probablement l'outil GNU le moins fonctionnel qui existe.rename
c'est différent sur Fedora / Red Hat: je ne sais pas comment l'utiliser dans ce cas.Vous pouvez utiliser la
cp
commande avec l'-a
optionEt puis utilisez une boucle for pour renommer tous les fichiers tout en les copiant:
Prêt. Démarrez cette commande dans le répertoire source.
Explication: Le
%%-*
va couper tous les caractères après la première occurrence d'un trait d'union / moins-
et le.etf
à la fin ajoute à nouveau l'extension de fichier.Eh bien, et en tant que doublure, mettez le tout sur une seule ligne. :-) Comme ça
la source
%%-*
astuce? Je suis curieux.Dans zsh, utilisez
zmv
. Mettez ceci dans votre.zshrc
:Ensuite, utilisez
En bash:
Si vous n'avez pas zsh, une manière POSIX utilise pax (cela copie les répertoires de manière récursive).
Si vous êtes sur un système restreint sans zsh et sans pax, vous pouvez utiliser une boucle:
la source
cp
n'a pas cette capacité. Je me souvienscpio
avoir pu le faire, mais la page de manuel actuelle dit le contraire. Cependant, (gnu)tar
a une--transform
option:Vous auriez donc une ligne de commande comme:
la source