Adakah yang punya solusi untuk menghapus file sial ._ dan .DS_Store yang didapat setelah memindahkan file dari Mac ke Server Linux?
tentukan direktori mulai dan lepaskan? seperti / var / www / html / bawah ...
Adakah yang punya solusi untuk menghapus file sial ._ dan .DS_Store yang didapat setelah memindahkan file dari Mac ke Server Linux?
tentukan direktori mulai dan lepaskan? seperti / var / www / html / bawah ...
Jawaban:
ubah ke direktori, dan gunakan:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
Tidak diuji, coba dulu tanpa xargs!
Anda dapat mengganti periode setelah menemukan, dengan direktori, alih-alih mengubah ke direktori terlebih dahulu.
find /dir/here ...
-deletetindakan, yang dapat mempersingkat ini. @JT: Pencarian ini secara rekursif di bawah .. Bergantung pada berapa banyak file dan subdirektori ... tidak bisakah Anda hanya melarang file-file itu diunggah?
-rflag (rekursif) tidak disarankan dalam kasus ini karena Anda tidak ingin menghapus direktori apa pun ..
command rmsolusi yang lebih baik (yaitu, lebih langsung)? (Secara "langsung" yang saya maksudkan adalah secara khusus menangani masalah yang dihadapi dan tidak ada yang lain, dan karena itu lebih kecil kemungkinannya memiliki efek samping yang tidak diinginkan, dan juga akan menjadi lebih jelas bagi siapa saja yang harus menjaga kode tersebut. nanti.)
Findutils baru mendukung -delete, jadi:
find . -name ".DS_Store" -delete
Menambahkan -print juga untuk mendapatkan daftar penghapusan.
Perintah akan bekerja untuk Anda jika Anda memiliki sistem POSIX terbaru, saya percaya. Setidaknya itu berfungsi untuk saya pada OS X 10.8 dan bekerja untuk orang lain yang telah mengujinya di macOS 10.12 (Mojave).
Berikan kredit pada @femient dalam komentar di kiriman @ X-Istence (merasa cukup membantu untuk mendapatkan jawabannya sendiri).
findberulang ke direktori kerja saat ini secara default.
.di macOS 10.12 (Sierra).
Perintah sederhana:
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
Semoga berhasil!
rm -i ./ -nama '* py'` -rf , which did NOT prompt me to delete files. you will need to take it on the end (i.e. -rfi`). Terima kasih Tuhan untuk skrip cadangan saya.
-bash: /bin/rm: Argument list too long
cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm
Anda dapat beralih ke zsh bukannya bash. Ini memungkinkan Anda menggunakan ** untuk mencocokkan file di mana saja di pohon direktori:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
Anda juga dapat menggabungkannya seperti ini:
$ rm /var/www/html/**/(_*|.DS_Store)
Zsh memiliki banyak fitur lain yang kurang dimiliki oleh bash, tetapi satu saja yang layak dilakukan. Ini tersedia di sebagian besar (mungkin semua) distro linux, serta cygwin dan OS X.
Anda dapat menemukan informasi lebih lanjut di situs zsh .
**juga :-) (meskipun tidak secara default, shopt -s globstarperlu diatur)
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
findyang mendukungnya, +seperti-xargs: find . -name "FILE-TO-FIND" -exec rm -rf {} +- (juga, Anda kehilangan spasi sebelumnya -exec)
Contoh untuk menghapus "Thumbs.db" secara rekursif;
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
Validasi berdasarkan:
find . -iname "Thumbs.db"
Ini seharusnya sekarang, tidak menampilkan salah satu entri dengan "Thumbs.db", di dalam jalur saat ini.
xargsdan print0bukannya exec(ada alasan).
Lebih baik melihat apa yang dihapus dengan menambahkan -cetak pada jawaban ini
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print
jika Anda memiliki Bash 4.0 ++
#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._
do
echo rm "$file"
done
Beberapa hal yang perlu diperhatikan:
'-delete' tidak rekursif. Jadi jika .T TemporaryItems (folder) memiliki file di dalamnya, perintah gagal.
Ada banyak file sial yang dibuat oleh mac: .DS_Store ._. DS_Store .T TemporaryItems .apdisk
Perintah yang satu ini membahas semuanya. Menghemat dari menjalankan pencarian berulang-ulang untuk beberapa pertandingan.
find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;
Ini juga berfungsi:
sudo rm -rf 2018-03-*
di sini file menghapus Anda dengan nama format 2018-03- (sesuatu yang lain)
tetap sederhana
sudojuga tidak memberikan informasi bagaimana cara rmkerjanya dalam konteks jawaban Anda.