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.
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.
Antworten:
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.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
find
bitte läuten ein.find
mit-exec mv
Option ist wirklich gut für solche Sachen.quelle