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

  • Если файл удален, он копируется в папку «Корзина / файлы», а затем удаляется, а его информация сохраняется в папке «Корзина / информация» в Nautilus.
  • Поэтому я подумал, что если я сделаю файл недоступным для чтения, он может не появиться в корзине, поскольку его нельзя скопировать. Но когда я попробовал, он все равно оказался в мусорном ведре.
  • Таким образом, я пришел к выводу, что он непосредственно перемещает файл в каталог корзины.

Теперь вот мой вопрос,

Я пытаюсь имитировать это поведение с помощью программирования на Python. Но я хочу сначала выполнить некоторые проверки, а затем скопировать файл в корзину перед выполнением команды rm.

Я беру строку команды rm от пользователя, затем делаю некоторые проверки и копирую файл в корзину, а затем выполняю команду rm. Я не хочу напрямую перемещать файл в корзину. Но если я просто скопирую файл, он выдаст мне ошибку «Отказано в разрешении» из-за только разрешения на чтение. Как решить это? Любая работа вокруг?

2 ответа2

0

Я не знаком с Python. Я использую стандартные команды Unix, чтобы проиллюстрировать свои мысли. Перевести на Python по своему усмотрению.

В пределах одной файловой системы, которая достаточно разумна , mv должен быть атомарным. Если вы решите переместить файлы в два этапа, например, cp+rm , то вам нужно убедиться, что cp успешно завершился, прежде чем вы rm . С атомарным mv нет никакого риска, что вы в конечном итоге получите файл без ссылки или «наполовину здесь, наполовину там».

Переход с одной файловой системы на другую с помощью mv похож на cp+rm ; mv ожидает выполнения задачи копирования, прежде чем она отменяет связь с исходным файлом, но мало что может пойти не так.

Как прокомментировал AFH:

Чтобы скопировать файл, вы должны быть в состоянии прочитать его, но чтобы переместить его, вам нужен доступ на запись к исходному и целевому каталогам, без необходимости чтения перемещаемого файла.

Правда. Однако существует способ "скопировать" файл в пределах одной файловой системы, не читая его: создать жесткую ссылку. Убедитесь, что вы понимаете разницу.

Если вы по- прежнему настаивают на том, делать это в два этапа, а cp+rm Ьгу ln+rm первой. Конечно , вы должны убедиться , ln работал , прежде чем rm Попытка создать ссылку между устройствами потерпит неудачу. В этом случае вам следует вернуться к cp+rm (и я думаю, что нет способа сделать это без чтения файла).

0

Это «просто» переименование, как указано в комментарии.

Тем не менее, есть нечто большее, чем просто перемещение файла, вовлеченного в помещение его в корзину. Вам также необходимо скопировать метаданные в соответствующее место в соответствующем формате, иначе восстановление файла не будет работать правильно. См. Спецификацию мусора FD.O/XDG для получения дополнительной информации о том, что все происходит. Обратите внимание, что почти все используют опциональную поддержку для размещения каталога корзины в корне съемного носителя, чтобы избежать проблем с попыткой удаления файлов, к которым у вас нет прав на чтение, но в противном случае они могут перемещаться в этой файловой системе.

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