0
votes

Renommer des fichiers dans un dossier à un seul nom

J'ai plusieurs fichiers .pdb dans différents dossiers. Comment boucler via tout le répertoire nommer tous les fichiers à un nom particulier test.pdb?

Structure de l'échantillon p> xxx pré>

Structure de sortie souhaitée p>

for d in */ ; do
    mv *.pdb test.pdb
done


1 commentaires

Dans votre boucle, vous effectuez toujours la commande identique dans le répertoire à partir de laquelle vous exécutez la boucle. Vous n'accédez jamais à un fichier PDB dans un sous-répertoire. De plus, mv * .pdb quelque chose renommerait un fichier uniquement s'il n'ya qu'un seul fichier PDB correspondant au motif. S'il y en a plus d'un, quelque chose doit être un répertoire et les fichiers sont déplacés dans ce répertoire.


3 Réponses :


1
votes

Vous devez inclure le nom du répertoire. Juste *. PDB code> se développera toujours aux fichiers correspondant au Wildcard dans le répertoire actuel.

for d in ./*/ ; do
    mv "$d/"*.pdb "$d/"test.pdb
done


0 commentaires

0
votes

Essayez ceci xxx


1 commentaires

Cela pourrait fonctionner pour le cas exact décrit, mais se brisera dès qu'il y a plus d'un fichier .pdb dans un répertoire, et pour tout répertoire contenant des espaces blancs ou des métacaraceurs de shell (en raison d'une expansion non cotée).



0
votes

solution alternative, itération des fichiers PDF, au lieu des noms de dossiers.

Ce n'est pas clair si un autre fichier PDB, dont le nom ne correspond pas au nom du dossier doit également être affecté. Le test de code pour cette condition. Il peut être supprimé si non nécessaire. P>

for file in */*.pdb ; do
    d=$(dirname $file)
    b=$(basename $file .pdb)
    [ "$d" = "$b" ] && mv "$d/$b.pdb" "$d/test.pdb"
done


0 commentaires