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