So verschieben Sie ungeöffnete Dateien in einen anderen Ordner


0

Ich bin ein Anfänger in Linux und möchte ein Skript in bash erstellen, um zu überprüfen, welche Dateien in einem Ordner geöffnet sind, und alle anderen Dateien zu verschieben, die nicht in einen anderen Ordner geöffnet sind.


1
Und woher sollte das System wissen, dass eine Datei geöffnet wurde? Dies ist nur möglich, wenn eine Anwendung verwendet wird, die einige Metadaten aktualisiert, wenn der Benutzer auf die Datei zugreift.
Julian Knight

1
Was ist mit lsof?
Petr

1
Das prüft, was eigentlich offen ist. Das geht nicht aus Ihrer Frage hervor. Der Wortlaut implizierte, dass Sie prüfen wollten, was geöffnet / ungeöffnet war, nicht was gerade geöffnet / ungeöffnet war, was völlig anders ist.
Julian Knight

Richtig, ich möchte überprüfen, was eigentlich offen ist - ich bin kein englischer Muttersprachler.
Petr

Ich habe mir erlaubt, den Wortlaut zu präzisieren.
Julian Knight

Antworten:


0

Ich kann mir keine ganz elegante Möglichkeit vorstellen, dies zu tun. Ich habe das gehofft find hätte eine Möglichkeit dafür. Das hätte das leicht gemacht. Ich habe jedoch keine Option gefunden, eine Datei als offen zu kennzeichnen, also habe ich ein kleines Skript erstellt, um die Logik herunterzufahren.

#!/bin/sh
DIR=/some/files
NEW_DIR=/some/new/files
OPEN_FILES=$(lsof -Fn $DIR/* | grep ^n | cut -c2- | sort -u)
for file in $DIR/*; do
    if echo "$OPEN_FILES" | grep -q $file; then
        echo "$file is opened - not moving"
        continue
    fi
    mv $file $NEW_DIR/
    echo "$file moved"
done

Es ist ehrlich gesagt ziemlich ekelhaft, aber hoffentlich ist es die Grundlage für das, was Sie wollen, und Sie können mehr nach Bedarf ändern. Wenn jemand eine Möglichkeit kennt, dies zu tun findbitte läuten ein. find mit -exec mv Option ist wirklich gut für solche Sachen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.