Comment puis-je copier et renommer des fichiers avec le même nom de fichier

0

J'ai une structure de répertoire qui contient un certain nombre de fichiers nommés de la même manière que dans:   dir1 / test   dir2 / test   dir3 / test Je souhaite rechercher chaque fichier de test et le copier dans un autre répertoire avec un nom de fichier unique (arbitraire) afin d'analyser les données qu'il contient. Un grand nombre de ces fichiers portant le même nom pourraient contenir plusieurs couches situées au cœur de la structure de répertoires. Je peux utiliser find pour localiser les fichiers mais le renommage (en utilisant find) me fait allusion. Quelqu'un peut-il fournir des conseils sur cette question?

Charles
la source

Réponses:

1
  • source_dir est la forme du répertoire racine où vous souhaitez rechercher les fichiers.
  • destination_dir est le répertoire de destination où vous voulez copier ou déplacer vos fichiers
  • * .doc est votre nom de fichier ou modèle de fichier à rechercher.

Vous pouvez copie fichiers avec la commande suivante! Notez que --backup=numbered crée un fichier suffixé numériquement augmenté si le fichier portant ce nom est déjà dans le répertoire de destination

find /source_dir -type f -name *.doc | xargs -I '{}' cp --backup=numbered {} /destination_dir

Vous pouvez bouge toi fichiers avec la commande suivante! Notez que --backup=t crée un fichier suffixé numériquement augmenté si le fichier portant ce nom est déjà dans le répertoire de destination

find /source_dir -type f -name *.doc | xargs -I '{}' mv --backup=t {} /destination_dir

Vous pouvez également envisager d’utiliser ces commandes avec sudo si vous avez peut-être en cours de recherche des fichiers correspondants appartenant à un autre utilisateur

Si vous voulez une sortie détaillée de ces commandes, ajoutez add -v après --backup=numbered ou --backup=t.

mkungla
la source
0

Vous pouvez remplacer le / dans le chemin par un autre caractère et l'utiliser comme nouveau nom de fichier:

#!/bin/bash
for f in /dir*/*
do
    cp "$f" "${f//\//.}"
done
Mark
la source
Puis-je intégrer votre réponse dans une commande de recherche? Comme dans, trouver. -name FNAME -exec bash -c 'pour f dans {} do; cp {} "$ f" "/ tmp / somedir / $ {f // \ //.}"; terminé \;. Je l'ai essayé et le modificateur reçu a échoué. Cela devrait-il fonctionner?
Charles