Bagaimana cara menghapus semua file dengan ekstensi tertentu dengan aman (mis. .bak
) dari direktori saat ini dan semua subfolder menggunakan satu baris perintah? Cukup, aku takut untuk menggunakan rm
karena saya menggunakannya salah sekali dan sekarang saya butuh saran.
Anda bahkan tidak perlu menggunakan rm
dalam hal ini jika Anda takut. Gunakan find
:
find . -name "*.bak" -type f -delete
Tapi gunakan dengan hati-hati. Jalankan dulu:
find . -name "*.bak" -type f
untuk melihat dengan tepat file mana yang akan Anda hapus.
Juga, pastikan bahwa -delete
adalah argumen terakhir dalam perintah Anda. Jika Anda meletakkannya sebelum -name *.bak argument
, ini akan menghapus semuanya.
Lihat man find
dan man rm
untuk info lebih lanjut dan lihat juga pertanyaan terkait ini di SE:
< kode>temukan . - nama"*.bak " - tipe F-print0 / xargs -0 / bin / rm-f
< / kode > < / pra>
Pertama jalankan perintah shopt -s globstar
. Anda dapat menjalankannya di baris perintah, dan itu hanya akan berpengaruh di jendela shell itu. Anda bisa memasukkannya ke dalam .bashrc
, dan kemudian semua cangkang yang baru dimulai akan mengambilnya. Efek dari perintah itu adalah untuk membuat **/
Cocokkan file di direktori saat ini dan subdirektorinya secara rekursif (secara default, **/
berarti hal yang sama seperti */
: hanya di subdirektori langsung). Kemudian:
rm **/*.bak
(atau gvfs-trash **/*.bak
atau apa yang telah Anda).
Menghapus file bagi saya bukan sesuatu yang harus Anda gunakan rm
untuk. Berikut adalah alternatif:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trashalias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without aliastrash *.bak # trash the files (thus moving them to the trash bin)
Seperti yang dinyatakan Flimm di komentar:
Paket
trash-cli
melakukan hal yang sama sepertigvfs-trash
tanpa ketergantungan pada gvfs.
Jadi:
sudo apt-get install trash-cli
Anda tidak perlu membuat alias untuk ini, karena trash-cli
paket menyediakan perintah trash
, yang melakukan apa yang kita inginkan.
Seperti yang dijelaskan Eliah Kagan dalam komentar ekstensif, anda juga dapat membuat rekursif ini menggunakan find
. Dalam hal ini Anda tidak dapat menggunakan alias, jadi perintah di bawah ini menganggap Anda telah menginstal trash-cli
. Saya merangkum komentar Eliah:
Perintah ini menemukan dan menampilkan semua .bak
file dan symlink di mana saja di direktori saat ini atau subdirektorinya atau di bawahnya.
find . -name '*.bak' -xtype f
Untuk menghapusnya, tambahkan -exec
dengan trash
perintah:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
memilih file dan symlink ke file, tetapi bukan folder. Untuk menghapus .bak folder juga, menghapus bagian itu, dan menggunakan -execdir
, yang menghindari cannot trash non-existent
kesalahan untuk .bak
file di dalam .bak
direktori:
find . -name '*.bak' -execdir trash {} +
Jika Anda ingin menghapus semua file dari jenis tertentu, tetapi hanya 1 folder "dalam" dari folder saat ini:
find . -maxdepth 2 -name "*.log" -type f -delete
- maxdepth 2 karena direktori saat ini "."dihitung sebagai folder pertama.
Jawaban Cepat:
-
Hapus semua file dengan nama yang dipertimbangkan atau postfix secara rekursif:
find . -name '*.pyc' -type f -delete
-
Hapus semua direktori dengan nama yang dipertimbangkan secara rekursif:
find ~ -path '*/__pycache__/*' -deletefind ~ -type d -name '__pycache__' -empty -delete
Agak kurang dikontrol ketat, tetapi dalam satu baris:
find ~ -path '*/__pycache__*' -delete
[Catatan]:
d
adalah opsi direktori dan f
adalah opsi file.
Anda bisa daftar semua file dengan ekstensi yang pertama sebelum Anda menggunakan rm
Misalnya,
ls *.bak
Jika Anda mendapatkan hanya file yang ingin Anda hapus maka Anda dapat menggunakan rm
rm *.bak
Jika Anda ingin memeriksa daftar sebelum Anda menghapus file, Anda dapat menggemakannya.
find . -name "*.bak" -type f | xargs echo rm -rf
Ini akan mencantumkan hasil pencarian yang disalurkan ke perintah rm melalui xargs.Setelah Anda yakin tentang daftar Anda bisa drop echo di atas perintah.
find . -name "*.bak" -type f | xargs rm -rf
Related post- [bagaimana cara menghapus direktori secara rekursif dengan wildcard?] (rm - How do I recursively delete directories with wildcard? - Unix & Linux Stack Exchange)