2 votes

Créer un nouveau dossier pour chaque fichier

J'ai essayé de créer une sorte de script pour automatiser le déplacement d'environ 408 éléments d'une taille d'environ 1,5 To.

Ce que je veux faire, c'est créer un dossier basé sur le nom du fichier, mais exclure l'extension, puis déplacer l'élément original portant le même nom dans le dossier. Tous les fichiers ont des extensions différentes, et ont également des périodes tout au long du nom. Il doit être exécuté comme un shell script ou AppleScript, car il sera exécuté sous launchd après le déplacement initial pour les déplacements automatisés de fichiers. Y a-t-il une bonne façon de procéder ? (Même sans utiliser AppleScript). Cela ne me dérange pas d'utiliser le shell ou toute autre méthode qui est suggérée.

J'ai trouvé ce poste sur StackOverflow, mais je n'ai pas pu lui donner beaucoup de sens, car il semblait simplement générer des erreurs. Toute aide est appréciée. Les fichiers ont des séquences alphanumériques et des caractères aléatoires dans les noms (je pense que c'est ce qui est attrayant dans AppleScript.

Edit : Désolé pour l'attente... j'étais au travail.

Ayez quelque chose comme :

Movies
    |- Anchorman.mkv
    |- Big Buck Bunny.mov
    |- Spy.mp4
    |- Shawshank Redemption.avi

Et je voudrais le résultat :

Movies 
   |- Anchorman *"This is a folder"*
       |- Anchorman.mkv *"This is the file"*
   |- Big Buck Bunny
       |- Big Buck Bunny.mov
   |- Spy
       |- Spy.ext
   |- Shawshank Redemption [1994](1080p)
       |- Shawshank Redemption [1994](1080p).avi

4voto

Je suppose que toutes les 408 sont dans le même dossier et qu'elles ont une extension. Quelque chose comme ça :

Folder
|- File1.ext
|- File2.ext
|- File3.ext
|- File4.ext

Et vous voulez le résultat suivant :

Folder 
|- File1 *"This is a folder"*
   |- File1.ext *"This is the file"*
|- File2
   |- File2.ext
|- File3
   |- File3.ext<br>
|- File4<br>
   |- File4.ext<br>

Si c'est le cas vous pouvez le faire avec le terminal avec la commande suivante (exécutez-la à l'intérieur du dossier où sont stockés les fichiers. Elle échouera à créer le dossier pour les fichiers sans extension) :

for FILE in *; do FOLDER=$(echo $FILE | sed 's/\.[A-Za-z0-9]*$//'); mkdir "$FOLDER"; mv "$FILE" "$FOLDER" ; done

0voto

Comme d'autres l'ont dit, il est difficile de savoir exactement ce que vous recherchez sans avoir les détails. Cet AppleScript devrait être un bon point de départ, et vous pouvez l'adapter à vos besoins. Il vous demandera d'identifier un dossier qui contient les fichiers que vous voulez placer dans des sous-dossiers. J'ai mis une propriété en haut appelée removePeriods, que vous pouvez définir à true ou false (sans guillemets). Si c'est vrai, tous les points seront supprimés du nom du fichier et ce nom sera utilisé pour créer un dossier. Bien sûr, vous pouvez modifier le nom pour qu'il contienne la ponctuation de votre choix. Vous pouvez également lui demander de supprimer toute autre ponctuation. Enfin, il prend le fichier et le déplace dans le nouveau dossier.

property rootFolder : ""
property removePeriods : true

--Assuming all the files you want to move are in one folder.
if rootFolder is "" then
    set rootFolder to choose folder
end if

--Get a list of every visible file in the folder (assuming you don't want to process hidden files)
tell application "System Events" to set myFiles to ¬
every file in rootFolder whose visible is true

repeat with aFile in myFiles
    --Get the file name
    set aName to name of aFile
    --If removePeriods property above is set to true, take all the periods out of the file name
    if removePeriods then
        set tid to text item delimiters
        set text item delimiters to "."
        if (count of text items of aName) is greater than 2 then
            set aName to text items 1 through ((count of text items of aName) - 1) of aName
        else
            set aName to text item 1 of aName
        end if
        set text item delimiters to tid
        set aName to every item of aName as text
    end if

--Make a new folder with the name of the file, inside the rootFolder (the original folder you selected
tell application "Finder"
    set newFolder to make new folder at rootFolder with properties {name:aName}
    move (aFile as alias) to newFolder
end tell

end repeat

Si vous avez des dossiers dans des dossiers, c'est un autre niveau mais cela peut être fait avec une autre boucle. Si vous voulez que tous les nouveaux dossiers contenant des fichiers soient placés à un nouvel endroit, il vous suffit d'ajouter ce chemin. Si vous voulez retirer uniquement le nom avant le premier signe de ponctuation pour créer le dossier, vous pouvez définir aName sur le premier élément de texte uniquement. Vous voudrez probablement aussi ajouter une vérification pour vous assurer qu'il n'existe pas déjà un dossier portant le nom que vous créez.

EDIT : A la demande d'un autre utilisateur, j'ajoute une note pour clarifier pourquoi j'ai défini rootFolder comme une propriété plutôt que comme une variable standard. Dans la photo ci-dessus, il apparaît que tous les fichiers du PO sont dans le dossier movies. Une propriété, dans AppleScript (et en termes simples), est une variable qui est enregistrée (stockée) entre les exécutions. Elle sera sauvegardée jusqu'à ce que le script soit compilé à nouveau, auquel moment elle sera remise à "". Une variable normale n'aura aucune mémoire d'une exécution précédente du script. J'ai choisi de faire de rootFolder une propriété pour que l'utilisateur n'ait pas à sélectionner manuellement le dossier à traiter à chaque exécution, seulement à la première exécution. Cependant, vous pourriez remplacer le début du script jusqu'au 'end if' par les deux lignes de code suivantes :

set rootFolder to choose folder
set removePeriods to true

Vous pouvez également coder en dur le chemin d'accès au dossier plutôt que de laisser l'utilisateur le sélectionner. Il existe de nombreuses options. Je devrais également dire à nouveau que ce n'est pas un script fini destiné à une utilisation finale, je l'ai créé comme un endroit pour commencer. Cependant, j'ai utilisé cette fondation comme une partie d'un script beaucoup plus grand et plus compliqué, pour réorganiser plus de 500 000 fichiers regroupés dans des dossiers nommés de manière unique, donc je suis confiant dans la structure.

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