Как обычно "переместить в корзину" или удалить параметр копировать файлы в папку "Корзина" обычно?
Вот что я попробовал:
- Если файл удален, он копируется в папку "Корзина / файлы", а затем удаляется, а его информация сохраняется в папке "Корзина / информация" в Nautilus.
- Поэтому я подумал, что если я сделаю файл недоступным для чтения, он может не появиться в корзине, поскольку его нельзя скопировать. Но когда я попробовал, он все равно оказался в мусорном ведре.
- Таким образом, я пришел к выводу, что он непосредственно перемещает файл в каталог корзины.
Теперь вот мой вопрос,
Я пытаюсь имитировать это поведение с помощью программирования на Python. Но я хочу сначала выполнить некоторые проверки, а затем скопировать файл в корзину перед выполнением команды rm.
Я беру строку команды rm от пользователя, затем делаю некоторые проверки и копирую файл в корзину, а затем выполняю команду rm. Я не хочу напрямую перемещать файл в корзину. Но если я просто скопирую файл, он выдаст мне ошибку "Отказано в доступе" из-за только разрешения на чтение. Как решить это? Любая работа вокруг?
2 ответа
Я не знаком с Python. Я использую стандартные команды Unix, чтобы проиллюстрировать свои мысли. Переведите на Python самостоятельно.
В пределах одной файловой системы, которая достаточно разумна, mv
должен быть атомным. Если вы решили переместить файлы в два этапа, т.е. cp
+rm
тогда вам нужно убедиться cp
удалось перед вами rm
, С атомным mv
нет никакого риска, что файл окажется полностью несвязанным или "наполовину здесь, наполовину там".
Переход с одной файловой системы на другую с mv
как cp
+rm
; mv
ждет, пока задача копирования завершится успешно, прежде чем она отсоединит исходный файл, но мало что может пойти не так.
Как прокомментировал AFH:
Чтобы скопировать файл, вы должны быть в состоянии прочитать его, но чтобы переместить его, вам нужен доступ на запись к исходному и целевому каталогам, без необходимости чтения перемещаемого файла.
Правда. Однако существует способ "скопировать" файл в пределах одной файловой системы, не читая его: создать жесткую ссылку. Убедитесь, что вы понимаете разницу.
Если вы все еще настаиваете на том, чтобы сделать это в два этапа, вместо cp
+rm
пытаться ln
+rm
первый. Конечно, вам нужно обеспечить ln
работал до тебя rm
, Попытка создать ссылку между устройствами потерпит неудачу. В этом случае вы должны вернуться к cp
+rm
(и я думаю, что нет способа сделать это без чтения файла).
Это "просто" переименование, как указано в комментарии.
Тем не менее, есть нечто большее, чем просто перемещение файла, участвующего в помещении его в корзину. Вам также необходимо скопировать метаданные в соответствующее место в соответствующем формате, иначе восстановление файла не будет работать правильно. См. Спецификацию мусора FD.O/XDG для получения дополнительной информации о том, что все происходит. Обратите внимание, что почти все используют опциональную поддержку для размещения каталога корзины в корне съемного носителя, чтобы избежать проблем с попыткой удаления файлов, к которым у вас нет прав на чтение, но в противном случае они могут перемещаться в этой файловой системе.