GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Befehl zum Erstellen von fortlaufend nummerierten Zielverzeichnissen und Batch-Move-Dateien?

Ich erstelle ein Zeitraffer-Video, indem ich ein Video in einzelne Bilder aufteile, G'MIC über die Befehlszeile verwende, um alle 7 Frames zu mitteln, und dann die Ergebnisse in neue Bilder auszugeben, die zu den Frames für den Zeitraffer führen (so bekomme ich rauschfreies Video, das großartig aussieht). Wie Sie sich vorstellen können, habe ich viele Frames – mehrere tausend einzelne Bilder in einem Verzeichnis, die nacheinander benannt sind (image1.tiff, image2.tiff usw. ). Ich habe ein Skript gefunden, das perfekt funktioniert, um die Dateien zu verschieben – einmal…

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

Was ich jetzt brauche, ist dieses Skript zu erstellen

  1. Wiederholen Sie sich, bis alle Dateien verschoben sind und
  2. Erstellen Sie nach und nach fortlaufend nummerierte Zielverzeichnisse (1, 2, 3 usw.), sodass ich am Ende mehrere hundert Verzeichnisse mit jeweils 7 Bildern darin habe.

Nur zur Verdeutlichung, Verzeichnis 1 sollte die Bilder 1-7 enthalten, Verzeichnis 2 sollte die Bilder 8-14 usw. enthalten.

Jede Hilfe wird sehr geschätzt, ich stecke ziemlich fest mit dieser.

Akzeptierte Antwort:

Das folgende (Python-)Skript erstellt Unterordner und organisiert Ihre Dateien in den Ordnern:

Zusätzlich:

  • Das Skript berechnet die Anzahl der Ordner und fügt führende Nullen zu den Ordnernamen hinzu, um eine korrekte Sortierung zu gewährleisten (da Sie Tausende von Dateien erwähnt haben, was Hunderte von Ordnern bedeutet)
  • Die Anzahl der Dateien pro Ordner kann je nach Einstellung im Kopf des Skripts variieren

Das Skript geht davon aus:

  • Alle Dateien haben eine Erweiterung, alle Dateien haben die gleiche Erweiterung
  • Ihre Dateien heißen image1.tiff , image2.tiff etc (keine führenden Nullen).

Das Skript

#!/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

Verwendung

Kopieren Sie das Skript in eine leere Datei, legen Sie im Head-Bereich das Verzeichnis auf Ihre Dateien und die Anzahl der Dateien pro Unterverzeichnis fest und speichern Sie es als organize.py .

Führen Sie es mit dem Befehl aus:

python3 /path/to/organize.py

Hinweis

Wenn Sie umziehen möchten statt die Dateien zu kopieren, ersetzen Sie die Zeile:

shutil.copyfile(file, target)

von:

shutil.move(file, target)

(Einzug beachten!)

Verwandte:Wie stelle ich die Hintergrundfarbe/das Hintergrundmuster in einem Nautilus-Fenster ein?
Ubuntu
  1. Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

  2. Erstellen und löschen Sie Benutzer in Ubuntu 20.04

  3. Wie verschiebe ich Dateien und Verzeichnisse in den übergeordneten Ordner in Linux?

  4. Eine Reihe von nummerierten Dateien verschieben?

  5. So verschieben Sie alle Dateien und Ordner mit dem Befehl mv

Kopieren Sie Dateien und erstellen Sie gleichzeitig Zielverzeichnisse

3 Möglichkeiten, Dateien und Verzeichnisse in Linux zu finden

So benennen Sie Dateien und Verzeichnisse in Ubuntu 20.04 um

So können Sie versteckte Dateien und Verzeichnisse unter Linux anzeigen und erstellen

4 Möglichkeiten zum Übertragen von Dateien und Verzeichnissen unter Linux

Stat-Befehl:Attribute von Dateien und Verzeichnissen anzeigen