So behalten Sie nur die größte Datei und löschen alle anderen Dateien

So behalten Sie nur die größte Datei und löschen alle anderen Dateien

Es befinden sich 3 oder 4 Dateien im selben Verzeichnis wie unten;

AAA.360p.mp4
AAA.450p.mp4
AAA.720p.mp4
AAA.1080p.mp4

Die Dateinamen dieser Dateien sind bis auf die Angabe der Bildauflösung nahezu identisch.

(AAA ist ein Beispiel für einen Dateinamen. Um zu zeigen, dass diese Dateinamen bis auf die Bildauflösung gleich sind.)

Und es gibt mehrere Punkte zwischen AAA.

Der Dateiname sieht beispielsweise so aus:

Interesting.Comedy.E10.200406.450p.mp4
Interesting.Comedy.E10.200406.720p.mp4
Interesting.Comedy.E10.200406.1080p.mp4

Die Größen der einzelnen Dateien sind unterschiedlich

(Dateigröße: 360p < 450p < 720p < 1080p) → Das stimmt immer.

Ich möchte nur eine Datei behalten, und zwar die mit der größten Größe, und alle anderen Dateien löschen.

Der Speicherort des Verzeichnisses ist/volume1/video/

Der Befehl wird nur auf der Synology ausgeführt. (um den Taskplaner in der Systemsteuerung zu verwenden)

Wenn Sie es mir erklären, geben Sie in meinem Fall bitte den Verzeichnispfad an, wie oben.

(weil ich den von Ihnen empfohlenen Code aufgrund mangelnden Verständnisses nicht anwenden kann. Ich bitte um Entschuldigung)

Antwort1

Der folgende Code wird Ihnen hilfreich sein, Sie können jedoch auch eine Kopie der Dateien erstellen und es zunächst in diesem Verzeichnis versuchen.

#!/bin/bash

var=`find /volume1/video/ -printf '%s %p\n'| sort -nr | head -n 1 | awk '{ print $2 }'`
largestfilename=`echo $var | rev | cut -d"/" -f1 | rev`

for i in `ls -S /volume1/video/`
do
        if [ ! $i == $largestfilename ]
        then
                rm -f /volume1/video/$i
        fi
done

Antwort2

LARGEST=$(ls -S /volume1/video/* | head -1)
ls /volume1/video/* | grep -v "$LARGEST" | xargs -d '\n' rm

Die erste Zeile führt einen Befehl aus, um alle Dateien in /volume1/video/sortiert nach Größe aufzulisten und leitet diese Liste weiter, headum die erste Datei zu identifizieren. Die Ausgabe dieses Befehls wird dann in einer Variablen namens gespeichert $LARGEST.

Die zweite Zeile listet alle Dateien /volume1/video/noch einmal auf, sucht den Namen der größten Datei heraus und entfernt den Rest.

Bearbeiten: Flag -d zu xargs hinzugefügt, um mögliche Leerzeichen in Dateinamen zu berücksichtigen. Siehediese AntwortFür mehr Information.

verwandte Informationen