Как обычно "переместить в корзину" или удалить параметр копировать файлы в папку "Корзина" обычно?

Вот что я попробовал:

  • Если файл удален, он копируется в папку "Корзина / файлы", а затем удаляется, а его информация сохраняется в папке "Корзина / информация" в 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 для получения дополнительной информации о том, что все происходит. Обратите внимание, что почти все используют опциональную поддержку для размещения каталога корзины в корне съемного носителя, чтобы избежать проблем с попыткой удаления файлов, к которым у вас нет прав на чтение, но в противном случае они могут перемещаться в этой файловой системе.

Другие вопросы по тегам