GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Commande pour créer des répertoires ciblés numérotés séquentiellement et des fichiers de déplacement par lots ?

Je crée une vidéo timelapse en divisant une vidéo en images individuelles, en utilisant G'MIC via la ligne de commande pour faire la moyenne toutes les 7 images, puis en sortant les résultats sur de nouvelles images qui se traduiront par les images pour le timelapse (de cette façon, j'obtiens vidéo sans bruit qui a fière allure). Comme vous pouvez l'imaginer, j'ai beaucoup de cadres - plusieurs milliers d'images individuelles dans un répertoire, nommées séquentiellement (image1.tiff, image2.tiff, etc. ). J'ai trouvé un script qui fonctionne parfaitement pour déplacer les fichiers - une fois…

k=1; find source/ -type f | while read file; do
     [[ k++ -le 7 ]] && mv "$file" target/ 
done 

Ce dont j'ai besoin maintenant, c'est de faire ce script

  1. se répéter jusqu'à ce que tous les fichiers soient déplacés et
  2. créer des répertoires cibles numérotés séquentiellement (1, 2, 3, etc.) au fur et à mesure, donc je me retrouve avec plusieurs centaines de répertoires contenant chacun 7 images.

Juste pour clarifier, le répertoire 1 devrait contenir les images 1-7, le répertoire 2 devrait contenir les images 8-14, etc.

Toute aide est grandement appréciée, je suis à peu près coincé avec celui-ci.

Réponse acceptée :

Le script (python) ci-dessous crée des sous-dossiers et organise vos fichiers dans les dossiers :

De plus :

  • Le script calcule le nombre de dossiers et ajoute des zéros non significatifs aux noms de dossier pour un tri correct (puisque vous avez mentionné des milliers de fichiers, ce qui signifie des centaines de dossiers)
  • Le nombre de fichiers par dossier peut varier en fonction de votre configuration dans l'en-tête du script

Le script suppose :

  • Tous les fichiers ont une extension, tous les fichiers ont la même extension
  • Vos fichiers sont nommés image1.tiff , image2.tiff etc (pas de zéros non significatifs).

Le scénario

#!/usr/bin/env python3
import os
import math
import shutil
#---
directory = "/path/to/files"      # path to your files
n_perfolder = 7                   # number of files per sub folder
#--
# creating file list, extension
f_list = os.listdir(directory); ext = f_list[0].split(".")[-1]
# calculate number of folders
n_folders = math.ceil(len(f_list)/n_perfolder)
# creating folder names, including leading zeros
folders = [str(fn+1) for fn in range(n_folders)]
fl_names = [(len(max(folders, key=len))-len(fl))*"0"+fl for fl in folders]
# creating folders and allocate files 
for i in range(len(fl_names)):
    mkfolder = directory+"/"+fl_names[i]
    if not os.path.exists(mkfolder):
        os.makedirs(mkfolder)
        r = range(i*n_perfolder+1, i*n_perfolder+n_perfolder+1)
        for n in r:
            try:
                file = directory+"/"+"image"+str(n)+"."+ext
                target = mkfolder+"/"+"image"+str(n)+"."+ext
                shutil.copyfile(file, target)
            except FileNotFoundError:
                pass

Comment utiliser

Copiez le script dans un fichier vide, dans la section head, définissez le répertoire sur vos fichiers et le nombre de fichiers par sous-répertoire, enregistrez-le sous organize.py .

Exécutez-le par la commande :

python3 /path/to/organize.py

Remarque

Si vous souhaitez déménager les fichiers au lieu de les copier, remplacez la ligne :

shutil.copyfile(file, target)

par :

shutil.move(file, target)

(attention au retrait !)

Connexe :Comment définir la couleur/le motif d'arrière-plan dans une fenêtre Nautilus ?
Ubuntu
  1. Rechercher des fichiers et des répertoires sous Linux avec la commande find

  2. Créer et supprimer des utilisateurs dans Ubuntu 20.04

  3. Renommer les fichiers par lots en ligne de commande et Xargs

  4. Comment déplacer des fichiers et des répertoires vers le dossier parent sous Linux ?

  5. Déplacer une série de fichiers numérotés ?

Copier des fichiers et créer des répertoires cibles en même temps

3 façons de trouver des fichiers et des répertoires sous Linux

Comment renommer des fichiers et des répertoires dans Ubuntu 20.04

Comment afficher et créer des fichiers et des répertoires cachés sous Linux

4 façons de transférer des fichiers et des répertoires sous Linux

Commande Stat :Afficher les attributs des fichiers et des répertoires