Frage So verschieben Sie nur eine bestimmte Anzahl von Bildern aus einem Ordner


Ich habe einen Ordner mit 200.000 Bildern. Ich möchte Folgendes tun:

  1. Verschieben Sie eine X-Anzahl von Bildern (50 Bilder, 100 Bilder, 200 Bilder) von diesem Ordner in den Y-Ordner.
  2. Jeder Y-Ordner kann eine Nummer sein (Ordner 1, Ordner 2, Ordner 3 ...).
  3. Das Endergebnis könnte folgendermaßen aussehen:

Ordner 1 (Hat X Anzahl Bilder) Ordner 2 (Hat X Anzahl der Bilder) Ordner 3 (Hat X Anzahl der Bilder) Ordner 4 (Hat X Anzahl der Bilder)


4
2017-10-16 00:15


Ursprung




Antworten:


Führen Sie das Skript in Ihrem Bildverzeichnis aus. Stellen Sie sicher, dass das Ziel keine Unterverzeichnisse hat.

IMG = 100 # Anzahl der zu verschiebenden Bilder
DES = "." # Ziel

I = $ (finden. -Maxdepth 1 -mindepth 1 -Typ f | wc -l)
N = $ (((I / IMG) + (I% IMG)))
eval mkdir "$ DES" / Ordner {01 .. $ N}

für i in $ (finde "$ DES" -maxdepth 1 -mindepth 1 -type d | sort); machen
    mv $ (find. -maxdepth 1 -mindepth 1 -type f | sort | grep -m $ IMG '. *') $ i
erledigt

3
2017-10-16 10:06



Hi Basharat, das Skript ist gut, funktioniert aber nicht. Es wirft den Fehler "Zeile 9: / bin / ls: Argumentliste zu lang" wegen der 200K-Bilder. - Luis Alvarado♦
@LuisAlvarado behoben. - Basharat Sialvi


Versuchen Sie dieses Skript, es sollte Ihre Anfrage erfüllen, aber die letzten X-Dateien bleiben im ursprünglichen Verzeichnis

OrigDIR = ~ / OrdnerX
DestDIR = ~ / OrdnerY
NumberOfMovedItems = $ 1
SubDestDir = $ 2
Anzahl = 1

while [`finde $ DIR -OrigDIR 1 -type f | wc -l` -gt $ NumberOfMovedItems]; machen
  NewSubDir = $ DestDIR / $ {SubDestDir} $ {Count}
  mkdir $ NewSubDir
  finde $ OrigDIR -maxdepth 1 -Typ f | head -n $ NumberOfMovedItems | xargs -I {} mv {} $ NewSubDir
  Lassen Sie Count ++
erledigt

Ändern Sie den Pfad von FolderX und FolderY nach Belieben.

Wenn Sie das Skript ausführen, müssen Sie die Anzahl der zu verschiebenden Elemente und den Namen des Unterverzeichnisses angeben

Quelle


1
2017-10-16 05:45



Das Skript, so wie es ist, funktioniert nicht. Bereits $ 1 und $ 2 hinzugefügt. Getestet das Skript, das du in dem Link erwähnt hast und das funktioniert. Wenn Sie können, bearbeiten Sie bitte Ihre Antwort, um das Skript zu korrigieren. - Luis Alvarado♦


Ich würde mit dem Erstellen einer Liste beginnen

ls X > X.list
for Y in `seq 1 10` ; do mkdir $Y ; mv `head -n $(( Y * 50 )) X.list | tail -n 50` $Y ; done

0
2017-10-16 04:59