Я новичок в Linux и хочу создать скрипт в bash, чтобы проверить, какие файлы открыты в папке, и переместить любые другие файлы - те, которые не открыты в другую папку.
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
вариант действительно хорош для вещей , как это.