Может ли программа продолжать работу с открытым файлом после его перемещения другой программой?

Ну, это действительно отвечает на мой вопрос конкретно, в этом комментарии Ре :Кусалананды, если он найдет более 2 файлов, он все испортит и удалит неправильные файлы. Этот скрипт предназначен для того, что мне нужно, но может быть адаптирован для других целей.

#!/bin/bash

#Create Log with Single Entry for Each Duplicate Without File Extension
duplog='dupes.log'
ls * |  awk '!/.srt/'  | sed 's/.\{4\}$//' | sort | uniq -d > "$duplog"

#Testing!
cat "$duplog"

#List Each Iteration of File in log starting with Largest File
log='tmp.log'
while read p; do

#More Testing!
du -k "$p".*

ls -1S  "$p".* >> "$log"
done < $duplog

#Testing!
cat "$log"

#Remove Large File Entry via Sed
#Note: This relies on only two variations being found or it will delete wrong lines in file
sed -i '1~2d' "$log"

#Testing!
cat "$log"

#Delete Smaller File
while read p; do
  echo "Deleting $p"
  rm "$p"
done <"$log"

#Delete Log
rm "$log"

Выход:

root@fs:/Movies# du -k tk.m*
4       tk.mkv
0       tk.mp4
root@fs:/Movies#./test.sh
tk
4       tk.mkv
0       tk.mp4
tk.mkv
tk.mp4
tk.mp4
Deleting tk.mp4
root@fs:/Movies#

PS :Я уверен, что это "хакерство", но это работает для того, что мне нужно, и это еще один шаг в процессе обучения:)

-2
25.02.2020, 15:10
3 ответа

can the first program still work on the file, for example, modify the file's content or attributes and save changes to the file?

Ага.

When a file is moved, it has a different pathname/filename, but it still has the same inode and data blocks.

Ага.

When a program opens a file, the pathname/filename of the file is used to look up its inode and data blocks, and the program holds directly or indirectly the pointers to the data structures of the inode and data blocks of the file.

Ага. Почти то же самое, если вы удалите файл, хотя в этом случае сложнее сохранить какие-либо изменения.

I am not sure if the pathname/filename is still useful after the lookup.

Я не понимаю, что вы имеете в виду. Я полагаю, это зависит от того, что кто-то сочтет полезным :, если вы снова выполните поиск по тому же пути, вы можете получить другой файл, как в этом случае.

Emacs, вероятно, считает полезным для пользователя знать, был ли файл изменен во время редактирования. Он должен что-то сделать, чтобы обнаружить это, либо опросить путь, либо использовать inotifyили что-то в этом роде. Некоторые другие редакторы не беспокоят.

Я не думаю, что здесь есть «должен», разные программы делают то, что их авторы считают полезным.

FWIW, приходит на ум, что редакторы также различаются в зависимости от того, как они работают с файлами резервных копий и создают ли они новую версию файла как новый индексный дескриптор или просто перезаписывают старую. Emacs, вероятно, настраивается в этом...

2
28.04.2021, 23:22

what behaviours are expected from programs

Это может помочь понять, что программа не получает никакого автоматического уведомления о том, что файл, который она открыла, был переименован. Файл, как вы догадались, остается неизменным на ход. Он не изменился; каталог , содержащий его имя, изменился. Вот почему права доступа к каталогу , а не права доступа к файлу, определяют, может ли файл быть удален (или создан ).

Программа может использовать различные способы уведомления об изменении каталогов. Однако большинство из них этого не делает, поэтому «ожидаемым» поведением будет молчание.

1
28.04.2021, 23:22

When a program opens a file, the pathname/filename of the file is used to look up its inode and data blocks,

Но программа получает только дескриптор файла, а не индексный дескриптор. Индекс предназначен для внутренней файловой системы.

vim говорит мне об этом -это даже ошибка красного цвета:

E211: File "test" no longer available

даже если я просто переименовал его --путем перемещения. В этом понятии нет переименования. Файл — это много вещей, но это основная единица для практических целей. Это ошибка, хотя я могу просто :wеще раз, как я бы и так сделал.

Существует также:

W11: Warning: File "test" has changed since editing started

если речь идет только о содержимом.

viкажется, молчит.

1
28.04.2021, 23:22

Теги

Похожие вопросы