как обычно «переместить в корзину» или удалить опцию копировать файлы в корзину?

388
Natesh bhat

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

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

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

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

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

0
Чтобы скопировать файл, вы должны быть в состоянии прочитать его, но чтобы переместить его, вам нужен доступ на запись к исходному и целевому каталогам, без необходимости чтения перемещаемого файла. Вы можете использовать `os.remame ()`, как описано [здесь] (https://stackoverflow.com/a/2491232/5164855). AFH 5 лет назад 0

2 ответа на вопрос

0
Kamil Maciorowski

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

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

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

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

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

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

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

0
Austin Hemmelgarn

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

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

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