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

Nur die letzten 8 Dateien in einem Verzeichnis in ein anderes Verzeichnis verschieben?

Ich versuche, die letzten 8 Dateien aus den Documents zu verschieben Verzeichnis in ein anderes Verzeichnis, aber ich möchte sie nicht einzeln in dieses bestimmte Verzeichnis verschieben. Ist es möglich, sie mit einem Ersatz für den tail zu verschieben Befehl, aber für Verzeichnisse statt Dateien? Ich meine, ich würde das gerne mit etwas wie tail -8 ./Documents | mv ./Anotherdirectory oder mit mv tail -8 ./Documents ./Anotherdirectory .

Tatsächlich suche ich nach einer cleveren Möglichkeit, die letzten 8 Dateien (wie in ls aufgeführt) zu verschieben ) schnell (ohne jeden Namen einzutippen) in das andere Verzeichnis. Irgendwelche Vorschläge?

Akzeptierte Antwort:

Sie können for verwenden , das die Dateien in einer geordneten Weise durchläuft und es uns ermöglicht, das Analysieren der Ausgabe von find zu vermeiden oder ls , um Probleme mit Leerzeichen und anderen Sonderzeichen in Dateinamen zu vermeiden. Vielen Dank an @muru für die Verbesserung 🙂

i=0; j=$(stat ~/Documents/* --printf "%in" | wc -l); for k in ~/Documents/*; do if (( (j - ++i) < 8 )); then echo mv -v "$k" ~/AnotherDirectory; fi; done 

Testen Sie es zuerst mit echo , dann echo entfernen um die Dateien tatsächlich zu verschieben.

Als Skript:

#!/bin/bash
i=0
j=$(stat ~/Documents/* --printf "%in" | wc -l )
for k in ~/Documents/*; do
  if (( (j - ++i) < 8 )); then
    echo mv -v -- "$k" ~/AnotherDirectory
  fi
done

Entfernen Sie erneut echo nach dem Testen, um die Dateien wirklich zu verschieben

Erklärung

  • i=0 der Shell sagen, dass sie bei 0 beginnen soll
  • j=$(stat ~/Documents/* --printf "%in" | wc -l ) dies setzt die Variable j auf eine Ganzzahl gleich der Gesamtzahl der Dateien im Verzeichnis. Dank Sergs Antwort auf meine eigene Frage, wie man Dateien zuverlässig zählt, egal welche Zeichen ihre Namen enthalten
  • do if (( (j - ++i) < 8 )) Testen Sie für jede Iteration der Schleife, ob das Ergebnis von j minus die Anzahl der Durchläufe der Schleife ist kleiner als 8 und wenn ja, dann
  • mv -v -- "$k" ~/AnotherDirectory verschieben Sie die Datei in das neue Verzeichnis

Ubuntu
  1. 5 Möglichkeiten, den Move-Befehl unter Linux zu verwenden

  2. Wie verschiebt man alle Dateien (einschließlich versteckter) von einem Verzeichnis in ein anderes?

  3. Zählen der Anzahl der Dateien in einem Verzeichnis mit C

  4. Wie verschiebt (und überschreibt) man alle Dateien von einem Verzeichnis in ein anderes?

  5. Wie kann ich die 5 zuletzt geänderten Dateien in einem Verzeichnis auflisten (ls)?

Verschieben Sie Dateien im Linux-Terminal

Im Ordner „/var/lib/dpkg/updates“ gespeichert?

So verschieben Sie Dateien mit dem Dateimanager in einen anderen Ordner

Wie kopiert man die Top 10 der neuesten Dateien von einem Verzeichnis in ein anderes?

Was ist der schnellste Weg, um unter Linux eine Million Bilder von einem Verzeichnis in ein anderes zu verschieben?

Grep in einer riesigen Logdatei (>14 GB) nur die letzten x GB?