Я новичок в Linux и хочу создать скрипт в bash, чтобы проверить, какие файлы открыты в папке, и переместить любые другие файлы - те, которые не открыты в другую папку.

1 ответ1

0

Не могу придумать совершенно элегантный способ сделать это. Я надеялся, что у find что-то для этого. Это сделало бы это легко. Но я не нашел возможности идентифицировать файл как открытый, поэтому я решил создать небольшой скрипт для упрощения логики.

#!/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

Честно говоря, это грубо, но, надеюсь, это основа того, что вы хотите, и вы можете изменять больше по мере необходимости. Если кто - нибудь знает способ сделать это с find пожалуйста перезвон в. find с -exec mv вариант действительно хорош для вещей , как это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .