J'ai un dossier avec un certain nombre de fichiers dans ABC. * (Il existe environ 100 fichiers de ce type). Je souhaite les dupliquer dans de nouveaux fichiers dont le nom commence par DEF. *
Donc je veux
ABC.Page1
ABC.Page2
ABC.Topic12
...etc
copié dans
DEF.Page1
DEF.Page2
DEF.Topic12
...etc
Quel est le moyen le plus simple de faire cela avec une commande batch (en BASH ou similaire)? Je pense à quelque chose impliquant sed ou awk ou xargs, mais j'ai du mal à comprendre la syntaxe. Je pourrais écrire un script Python, mais je pense qu'il existe probablement une solution en ligne de commande qui n'est pas trop compliquée.
mc
gestionnaire de fichiers supporte très largement ce type de renommage en masse.tar
n'est pas un poulet printanier non plus. Voir ma réponse pour un exemple.Réponses:
Que diriez-vous de quelque chose comme ça en bash:
vous pouvez le tester en mettant echo devant la commande cp:
la source
cp /usr/local/lib/libboost* /usr/local/lib/libboost*
avec le contrôle d'écho.Pour ce faire efficacement avec un grand nombre de fichiers, il est préférable d’éviter de lancer un
cp
processus différent pour chacun d’eux. Un moyen serait de copier puis de les renommer en utilisantprename
(rename
est lié symboliquement à cela par défaut sur les distributions basées sur Debian). En utilisant ceci et le Linuxmktemp
:Mise à jour
En fait,
pax
peut-être une meilleure façon d’aller ici:Malheureusement, bien qu’ils
pax
soient à la fois POSIX et Linux Standard Base, peu de distributions l’incluent actuellement par défaut.la source
tar
le fera pour vous très vite.TESTER
J'ai d'abord créé 2 répertoires et 10 fichiers:
Puis je les ai copiés:
TRANSFORMER
Donc, GNU
tar
acceptera unsed --transform=EXPRESSION
changement de nom de fichier. Cela peut même ne renommer que certains fichiers. Par exemple:C'est donc un avantage.
COURANT
Notez également qu'il ne s'agit que de deux
tar
processus - et cela ne changera pas, quel que soit le nombre de fichiers.tar
est aussi optimisé que vous le souhaitez. Cela n'aura jamais de compte d'arguments problématiques ni de processus enfants fugitifs. Ceci est juste A> B fait.ARGUMENTS
J'utilise 7 arguments distincts combinés entre mes deux
tar
processus ici. Le plus important est répertorié ici en premier:... et de l'autre côté de la
|pipe
...la source
pax
solution à cette question. Je voudrais l'ajouter à ma réponse, mais je pense que cela convient mieux ici -pax -rws '/^ABC/DEF/' ABC.* .
pax
POSIX est-il spécifié - d’où lepax
.pax
POSIX, mais il est malheureusement rarement installé par défaut.Si cela ne vous dérange pas d'utiliser un outil moins standard, je vous recommande d'utiliser mmv (déplacement de masse), qui a été écrit pour ce type de tâches. En utilisant
mcp
(copie de masse), qui fait partie de la suite, vous pouvez simplement faireCe n'est pas vraiment facile de trouver des paquets de téléchargement. Le paquet Debian actuel (qu'Arch utilise également dans AUR) à compiler à la maison est disponible ici .
la source
apt-get install mmv
Dans zsh, mettez les lignes suivantes dans votre
.zshrc
:Ensuite, en ligne de commande, vous pouvez exécuter
ou simplement
Dans un autre shell, tant que vous avez installé zsh:
la source
Vous pourriez faire ceci:
la source
"${i#*.}"
bit?Vous pouvez faire ceci: http://www.projectik.eu/index.php/programovanie/linux/item/243-linux-kopirovanie-suborov-vo-vlakne Voici un exemple
la source