Saya ingin menghapus beberapa file / direktori dari Time Machine Partition menggunakan rm , tetapi saya tidak dapat melakukannya. Saya cukup yakin masalah ini terkait dengan semacam kontrol akses atribut diperluas pada file dalam cadangan, tetapi tidak tahu bagaimana menimpa / menonaktifkannya untuk membuat rm bekerja. Contoh kesalahan yang saya dapatkan adalah:
% sudo rm -rf Backups.backupdb/MacBook/Latest/MacBook/somedir
rm: Backups.backupdb/MacBook/Latest/MacBook/somedir: Directory not empty
rm: Backups.backupdb/MacBook/Latest/MacBook/somedir/somefile: Operation not permitted
Ada beberapa alasan mengapa saya tidak ingin menggunakan Time Machine GUI atau Finder untuk ini. Jika memungkinkan, saya ingin dapat mempertahankan perlindungan yang diperluas untuk semua file lainnya (saya ingin tidak menonaktifkannya secara global, kecuali saya dapat mengaktifkan kembali setelah saya melakukan pekerjaan saya).
rm -r Backups.backupdb/MacBook/Latest/MacBook/somedir
; jika Anda setuju, maka silakan terima jawaban Arne?Jawaban:
Untuk mengatasi kesalahan "operasi tidak diizinkan", gunakan program " Mesin Pemintas " Net Mesin Keselamatan :
Di 10.8 Mountain Lion, memotong pindah ke 'Pembantu':
Di 10.10 Yosemite, bypass pindah ke sini:
Hati-hati saat menggunakan ini untuk menghapus foto-foto spesifik: karena Time Machine menggunakan tautan keras, menggunakan
rm -r
pada folder juga dapat memengaruhi foto-foto yang lebih lama dan lebih baru dari mesin yang sama . (Lihat jawaban lain yang merujuk padatmutil delete
menghapus snapshot tertentu dengan aman.) Menggunakanrm
untuk menghapus semua snapshot untuk satu mesin tidak masalah. Dan begitu juga menggunakanrm
untuk menghapus file tertentu, yang hanya akan menghapus file yang ditautkan dari snapshot yang Anda tentukan, dengan asumsi file tersebut tidak ada dalam direktori yang ditautkan karena Anda akan benar-benar menghapus file dari semua direktori yang ditautkan tersebut.sumber
sudo ...bypass rm -rf /Volumes/...
rm
proses tidak memahami ini dan akan mengikuti tautan ini dan menghapus file dari mereka. Ini berarti Anda berpotensi menghapus file yang juga ada dalam cadangan yang lebih lama dan lebih baru daripada yang Anda pilih, berpotensi menyebabkan kerusakan yang tidak dapat diperbaiki pada cadangan. Rekomendasi Arne Stenström tentang penggunaantmutil
sejauh ini merupakan solusi terbaik.rm
untuk file yang terhubung langsung adalah baik, tetapi untuk folder yang terhubung dengannya tidak. Jawaban Kent menyebutkan masalah yang sama. Dan di Apa perintah Unix untuk membuat hardlink ke direktori di OS X? seseorang menulis untuk 10,5 pada 2010: "Menghapus adalah cerita yang berbeda: jika Anda melakukannya dengan cara biasa untuk menghapus direktori, Anda akan menghapus isinya. Jadi Anda harus" memutuskan tautan "direktori:unlink new_hard_link
". Jadi hanya gunakan ini untuk menghapus semua cadangan (foto) untuk mesin yang diberikan.BLUF (garis bawah di muka):
Menggunakan untuk menghapus semua ACL dari hirarki folder tidak bekerja pada file dan folder di Time Machine ini Backups.backupdb , karena para TM Safety Net mekanisme dan kriteria yang dijelaskan dalam 318 Tek Journal posting (tapi mungkin tidak persis seperti yang dijelaskan) . (Sebelum mempelajari ini dari mencari Jaring Pengaman yang disebutkan dalam jawaban Eric W (yang berfungsi), saya hanya menguji pada folder yang diklon dari subfolder dari cadangan TM, dan di sana chmod bekerja. Tetapi mencoba chmod pada folder secara aktual Cadangan TM memberikan kesalahan "Operasi tidak diizinkan".)
sudo chmod -R -N folder
Kemungkinan penggunaan:
Di Mac OS 10.7+, ada perintah tmutil (yang belum saya coba, karena saya masih menggunakan Snow Leopard). Ini memiliki kata kerja delete , yang menurut deskripsi "dapat menghapus snapshot dari backup yang tidak dibuat oleh, atau tidak diklaim oleh, mesin saat ini" (di mana "snapshot" adalah folder bertanggal yang mewakili satu backup tambahan). Hal ini tidak jelas bagi saya apakah ini berarti bahwa ia tidak dapat menghapus snapshot yang sedang dibuat oleh atau diklaim oleh mesin saat ini. (?)
sumber
tmutil delete /Volumes/DISK/Backups.backupdb/HOST/DATE_FOLDER
). Namun, Anda masih memerlukan trik bypass Eric untuk menghapus folder "Backups.backupdb" itu sendiri.sudo tmutil delete <snapshot-dir>
.bypass rm
Jawaban populer sudah usang.tmutil
untuk menghapus hanya beberapa file dari snapshot? Itu tidak berhasil untuk saya (Invalid deletion target (error 22)
) jadi saya pergi dengannyabypass
.Backups.backupdb
direktori yang tidak saya lihat di drive cadangan saya (Kapsul Waktu). Saya hanya memiliki beberapa hal dalam formulirMachineName.sparsebundle
. Apakah formatnya berubah? Saya mencoba menggunakan perintah hapus cadangan TM, tetapi macet di progress bar 99,99% selama beberapa jam.Peringatan tentang penggunaan
bypass
perintah untuk menghapus cadangan lama: jika cadangan yang dihapus memiliki folder yang persis sama dengan cadangan sebelumnya atau yang lebih baru, maka file juga mungkin dihapus dari cadangan sebelumnya atau nanti !Time Machine tidak hanya menggunakan tautan keras untuk file yang tidak berubah, tetapi juga menggunakan tautan keras untuk folder tempat tidak ada file yang ditambahkan, diubah, atau dihapus sama sekali. Ini menghasilkan sesuatu seperti:
Dengan hal di atas, menghapus file apa pun dari
/2014-11-06/folder/
tidak masalah, dan hanya memengaruhi cadangan untuk tanggal tersebut. Jumlah referensi tautan keras berkurang, sehingga " inode " untukfile2
akan dihapus, tetapi inode untukfile1
danfile3
masih akan memiliki jumlah referensi 1 karena cadangan nanti. Karenanya,rm -R /2014-11-06
juga baik-baik saja.Namun, menghapus file apa pun dari salah satu
/2014-11-13/folder/
,/2014-11-20/folder/
atau/2014-11-27/folder/
secara efektif akan menghapusnya dari ketiga folder tersebut.Masalahnya adalah bahwa
rm -R
tidak peduli dengan folder yang ditautkan. Itu hanya berulang ke setiap folder yang ditautkan menemukan, dengan berani menghapus semua file, dan kemudian menghapus folder kosong.Jadi: saat menghapus cadangan yang lama jangan sampai muncul kembali ke folder yang ditautkan dan hapus isinya. Sebagai gantinya, seseorang hanya harus menghapus tautan keras untuk folder itu sendiri . Jadi, daripada
rm -R
menggunakantmutil delete
seperti yang dijelaskan dalam jawaban Arne .Selain itu, tampaknya
unlink
perintah OS X tidak dapat digunakan pada folder : "hanya satu argumen, yang tidak boleh berupa direktori, boleh diberikan" . OS X API dapat menghapus folder yang ditautkan, dan begitu pula GNU Coreutils , seperti yang diinstal menggunakan Homebrew .Akhirnya, untuk membuktikan semua hal di atas, sebuah test-case (OSX 10.6.8):
Perhatikan bahwa jumlah tautan untuk setiap kemunculan adalah 2 (kolom kedua). Mari kita hilangkan kejadian pertama:
Jadi, setelah memutuskan tautan salah satu file, jumlah tautan turun menjadi 1 untuk setiap kejadian, meskipun file tersebut masih ditampilkan 3 kali. Belum ada masalah. Hapus kejadian pertama lagi:
Sekarang semuanya hilang. Rupanya file
TopSites.plist
terakhir diubah 2014-11-06 dan ditautkan pada 2014-11-13 saat beberapa file lainnya ditambahkan, diubah atau dihapus dalamSafari
folder. Selanjutnya, isiSafari
folder tidak berubah di dua cadangan berikutnya, sehingga pada 2014-11-20 dan 2014-11-27Safari
folder tersebut sulit dihubungkan ke cadangan sebelumnya.Memang, 4 folder hanya menggunakan 2 inode (kolom pertama):
sumber
touch file1; ln file1 file2; ln file2 file3; ls -li; rm file2; ls -li
hanya akan menghapus satu tautan keras. Tetapi untuk folder , di Apa perintah Unix untuk membuat hardlink ke direktori di OS X? seseorang menulis untuk 10,5 pada 2010: "Menghapus adalah cerita yang berbeda: jika Anda melakukannya dengan cara biasa untuk menghapus direktori, Anda akan menghapus isinya. Jadi Anda harus " memutuskan tautan "direktori:unlink new_hard_link
". Ini mungkin masih valid.unlink
(di 10.6.8) mengatakan bahwa hal itu tidak dapat digunakan pada direktori:When the utility is called as unlink, only one argument, which must not be a directory, may be supplied
.[bypass] rm -r
pada direktori yang ditautkan. (Tapi saya tidak harus menjelaskannya kepada Anda.)bypass unlink FILE
memiliki konsekuensi (tidak disengaja?) Yang sama denganbypass rm FILE
. FILE identik dihapus dari semua cadangan, bukan hanya satu lokasi yang ditentukan. Dan,unlink
TIDAK akan mengambil direktori atau lebih dari satu file sebagai argumen (server 10.6.8; tetapi, saya tidak berpikir ini akan berubah melalui versi OS yang lebih baru)bypass rm FILE
danbypass unlink FILE
menghapus semua file yang identik, yang tidak cocok dengan apa yang dilihat orangtouch file1; ln file1 file2; ln file2 file3; ls -li; unlink file2; ls -li
, atau untuktouch file1; ln file1 file2; ln file2 file3; ls -li; /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass unlink file2; ls -li
. Saya tidak akan pernah menghapus sesuatu dari cadangan ...Catatan: Karena "Jaring Pengaman TM" yang disebutkan oleh Eric W, jawaban ini tidak berfungsi untuk kasus cadangan Time Machine, yang terkait dengan pertanyaan tersebut. Tetapi untuk sebagian besar setiap kasus lainnya, informasi tentang cara menghilangkan ACL relevan.
Tidak perlu menggunakan alat ACL yang disalin dari OS yang lebih lama.
Gunakan
ls -le
untuk melihat ACL danchmod
mengubahnya.Untuk info lebih lanjut, ketik
man chmod
dan lihat di bawah "Opsi Manipulasi ACL".Perintah untuk menghapus semua ACL dari hierarki folder adalah:
sumber
Mesin waktu bekerja seperti rshapshot. Ini menciptakan pohon tautan keras untuk setiap cadangan baru. Tautan keras ke file yang sudah ada dalam cadangan sebelumnya hanya menggunakan sedikit ruang tambahan. Hanya ketika tautan keras terakhir ke suatu file dihapus, sebenarnya file itu dihapus dari sistem file.
Menghapus seluruh cadangan individu tidak ada salahnya. Anda hanya menghapus tautan keras. Tidak ada cadangan lain yang akan terpengaruh. Tapi itu bisa dicapai melalui tmutil.
Satu skenario di mana mungkin perlu untuk memotong perlindungan adalah untuk menghapus file tertentu dari semua cadangan (dan alasan mengapa saya berakhir di posting ini).
Disk cadangan saya penuh. Saya memiliki file yang sangat besar (banyak gigabytes) yang telah dicadangkan selama berbulan-bulan. Ada satu salinan fisiknya, tetapi banyak foto dengan tautan keras ke salinan itu. Untuk benar-benar menyingkirkan file itu, saya perlu menghapus tautan keras dari setiap cadangan.
Perhatikan bahwa nomor inode sama untuk semua tautan keras ke file yang sama.
(Terbaru hanya symlink ke direktori tanggal terakhir)
File dihapus dari semua cadangan, dan ruang dikembalikan. Jika file telah berubah dari waktu ke waktu, setiap cadangan akan memiliki salinan lengkap dan ruang yang dikembalikan akan sangat besar.
sumber
rm -r
mungkin (atau: telah) berbahaya. Lebih baik aman daripada menyesal dan gunakantmutil
untuk itu.Jika Anda tidak menjalankan perintah sebagai pengguna yang "memiliki" cadangan, Anda akan kesulitan menghapus dari baris perintah. Saya baru saja mengalami masalah ini dengan migrasi, dan kami harus mengirim ke seluruh cadangan Time Machine (1tb +) dan memformat drive sebelum kami bisa mendapatkan segala jenis akses ke sana - dan percayalah, saya mencoba segalanya untuk mengesampingkan izin.
sumber
chattr
). Root yang akan memberi Anda secara teoritis adalah untuk menghindari jaring keamanan apa pun .Jika Anda ingin menghapus semua file dalam folder dan bukan hanya file tertentu, Anda dapat melakukannya dengan menambahkan folder ke daftar pengecualian Time Machine. (Preferensi sistem -> Mesin Waktu -> Opsi. Seret folder di sini.)
Lain kali Anda melakukan cadangan, salinan folder itu akan dihapus dari cadangan sebelumnya.
Sekarang, jika Anda benar - benar ingin melakukan ini dari CLI, ada cara, meskipun sedikit rumit.
plutil -convert xml1 com.apple.TimeMachine.plist
untuk mengubahnya dari bentuk biner.
<string>/Path/To/Exclude</string>
plutil -convert binary1 com.apple.TimeMachine.plist
/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper -auto
Sunting: Ketika Anda melakukan langkah 9, semua salinan folder yang baru dikecualikan akan dihapus dari cadangan sebelumnya.
Untuk menghapus pengecualian, salin cadangan Anda kembali ke / Library / Preferences.
sumber
su - root
dan kemudianrm -rf
folder, tapi saya pikir mengutak-atik sesuatu yang berharga seperti cadangan dengan cara itu adalah sesuatu yang secara umum harus dihindari.sudo
memiliki efek yang sama sepertisu - root
pada mac. Saya ingat suatu saat ketika saya mencoba untuk menghapus sesuatu yangsudo
tidak cukup, tetapisudo - root
berhasil.Anda bisa membuat
ls
daftar atribut diperluas dalam tampilan panjang menggunakan-@
bendera. Ini akan mencantumkan ACL ketika Anda memasok-e
bendera. Jadi, Anda bisa mengetahui apa yang Anda hadapi dengan menggunakanls -lea@ DIR
.Dilihat oleh cadangan Time Machine lokal saya, sepertinya Time Machine menerapkan atribut tambahan dengan metadata tentang snapshot terbaru dan tertua. Data yang disimpan oleh xattrs terlihat seperti binary plist. Ini tampaknya tidak berbahaya.
Time Machine juga berupaya menerapkan ACL ke direktori tertentu yang diketahuinya, seperti yang ditempatkan di direktori pengguna standar. Ada dua jenis ACL yang berpotensi menghalangi Anda: yang diterapkan langsung ke file atau direktori yang menolak delete, dan yang diterapkan pada induk dari file yang menolak delete_child.
Sayangnya, Mac OS X tidak menyediakan utilitas pengguna
getfacl
dansetfacl
ditentukan oleh POSIX.2c untuk melihat dan memanipulasi ACL. Untuk mengacaukan ACL, Anda harus melakukan pemrograman; lihat halamanacl(3)
manual.sumber