1 votes

terminal script pour renommer les dossiers dans un schéma spécifique

J'ai des centaines de fichiers vidéo stockés chacun dans un dossier. Le schéma dans lequel j'ai nommé chaque dossier est le suivant :

ABCD

pour les films dont le titre commence par A, B, C ou D par exemple. Dans ce dossier se trouvent des dossiers de films comme celui-ci

Blade Runner 2049 (2017) 0526 20180223Eph

0526 est un numéro spécifique pour ce fichier/dossier.

J'aimerais renommer tous les dossiers selon ce schéma :

(0526) Blade Runner 2049 (2017) 20180223Eph

mais je ne sais pas comment faire cela sur mon mac ?! veuillez noter que certains dossiers n'ont pas le suffixe comme 20180223Eph .

Cela devrait être fait pour tous les films en une seule fois - les renommer tous en utilisant le finder serait un peu trop long...

Merci d'avance,

mnasdaq

sorting of my movies

1voto

user3439894 Points 52496

Tout d'abord, je dois dire que le exemple bash code utilisé dans cette réponse, présenté plus loin, n'est en aucun cas robuste, mais il fait le travail !

Avec les éléments suivants comme échantillon représentatif de la structure hiérarchique des répertoires :

.
 ABCD
 EFGH
 IJKL
 MNOP
    A Most Violent Year (2014) 1180 20150807Lov
    A Most Wanted Man (2014) 1146
    A Nightmare on Elm Street (2010) 0432
    A Perfect Getaway (2009) 0433
    ¡NO! (2012) 0939
 QRST
 UVWX
 YZ

Puis, après avoir exécuté le exemple bash code enregistré comme un bash script et fonctionner à partir de l'intérieur de la répertoire contenant le structure hiérarchique montrent ci-dessus, les résultats pour le répertoires sera tel qu'indiqué ci-dessous, et étant donné que la sortie souhaitée déclarée est basée sur l'échantillon représentatif de l'entreprise. structure hiérarchique des répertoires montré ci-dessus :

.
 ABCD
 EFGH
 IJKL
 MNOP
    (0432) A Nightmare on Elm Street (2010)
    (0433) A Perfect Geatway (2009)
    (0939) ¡NO! (2012)
    (1146) A Most Wanted Man (2014)
    (1180) A Most Violent Year (2014) 20150807Lov
 QRST
 UVWX
 YZ

Pour utiliser le exemple bash code En Terminal cd à la répertoire contenant le ABCD , EFGH etc. répertoires et exécutez ce qui suit commandes :

touch rendir; nano rendir

Sur nano copier et coller le exemple bash code montré ci-dessous, dans le rendir puis appuyez sur Control + X et ensuite Y et ensuite Enter .

Suivant :

chmod u+x rendir

Maintenant qu'il est exécutable, lancez-le en tapant :

./rendir

Ensuite, appuyez sur Enter pour l'exécuter.

Exemple bash code :

#!/bin/bash

find -E . -type d -regex '.* [0-9]{4}$' > /tmp/foo

while read -r l; do
    p="$(dirname "$l")"
    d="$(basename "$l")"
    n="$(awk '{print "("$NF")"}'<<<"$d")"
    f="$(awk '{$NF=""; sub(/ $/, "", $0); print $0}'<<<"$d")"
    echo mv "$l" "$p/$n $f"
done</tmp/foo

find -E . -type d -regex '.* [0-9]{4} .*$' > /tmp/foo

while read -r l; do
    p="$(dirname "$l")"
    d="$(basename "$l")"
    n="$(awk '{print "("$(NF - 1)")"}'<<<"$d")"
    f="$(awk '{$(NF - 1)=""; print $0}'<<<"$d" | awk 'sub(/  /," ")')"
    echo mv "$l" "$p/$n $f"
done</tmp/foo

rm /tmp/foo

Notez que, tel qu'il est codé, il produira le résultat suivant mv commandes qui serait exécuté si echo n'était pas là. Après avoir testé et examiné la sortie pour voir que la mv commandes sont correctement formées, vous pouvez éditer rendir ( nano rendir ) et supprime les deux occurrences de echo et enregistrer le fichier, en utilisant à nouveau ( Control + X et ensuite Y et ensuite Enter ) et l'exécuter à nouveau.

À ce stade, vous devriez obtenir le résultat souhaité, comme indiqué dans le deuxième exemple. tree structure hiérarchique des répertoires montré ci-dessus. Ce site exemple bash code ne tient pas compte de tout écart par rapport à ce qui a été exprimé dans le PO et les commentaires du PO.


NOTE : Vous ne devez jamais exécuter code sans avoir d'abord été correctement sauvegardé et sans avoir testé la code sur un exemplaire de l'original.


Si je savais awk mieux j'imagine qu'un awk programme pourrait être écrit pour manipuler le chaîne de saisie à l'endroit souhaité chaîne de sortie en un seul appel de awk mais je ne sais pas. awk suffisamment bien pour y parvenir.

Nota: Le site exemple bash code est juste cela et n'emploie pas de gestion des erreurs et n'a pour but que de montrer une des nombreuses façons d'accomplir une tâche. Il incombe toujours à l'utilisateur d'ajouter ou d'utiliser les outils appropriés. traitement des erreurs selon les besoins/la volonté.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X