Bagaimana cara menghapus semua file dengan aman dengan ekstensi tertentu (mis. .bak
) Dari direktori saat ini dan semua subfolder menggunakan satu baris perintah? Sederhananya, saya takut menggunakannya rm
karena saya salah menggunakannya sekali dan sekarang saya butuh saran.
command-line
files
rm
batch
pengguna216038
sumber
sumber
rm *.bak
?rm *.bak
tidak akan berfungsi untuk subdirektori.rm *.bak
hanya akan menghapus semua file yang diakhiri dengan .bak di direktori saat ini. UNTUK juga melakukan hal-hal dalam subdirektori yang Anda perlukan untuk bermain-main dengan gumpalan, gunakan opsi -r atau gunakan contoh temukan.rm -r *.bak
! Itu juga menghapus direktori yang diakhiri.bak
dengan semua konten mereka.-delete
adalah argumen terakhir dalam perintah Anda. Jika Anda meletakkannya sebelum-name *.bak
argumen, itu akan menghapus semuanya.sumber
-delete
benderafind
. Informasi lebih lanjut dapat ditemukan di entri manual GNU untuk menghapus file dengan find .Pertama jalankan perintah
shopt -s globstar
. Anda dapat menjalankannya di baris perintah, dan itu hanya akan berpengaruh di jendela shell itu. Anda dapat memasukkannya ke dalam.bashrc
, dan kemudian semua kerang yang baru mulai akan mengambilnya. Efek dari perintah itu adalah membuat**/
file yang cocok di direktori saat ini dan subdirektori secara rekursif (secara default,**/
berarti hal yang sama dengan*/
: hanya di subdirektori langsung). Kemudian:(atau
gvfs-trash **/*.bak
apa pun yang Anda miliki).sumber
Menghapus file bagi saya bukanlah sesuatu yang harus Anda gunakan
rm
untuk. Berikut ini sebuah alternatif:Seperti yang dinyatakan Flimm dalam komentar:
Begitu:
Anda tidak perlu membuat alias untuk ini, karena
trash-cli
paket menyediakan perintahtrash
, yang melakukan apa yang kita inginkan.Seperti yang Eliah Kagan jelaskan dalam komentar yang luas, Anda juga dapat membuat ini menggunakan rekursif
find
. Dalam hal ini Anda tidak dapat menggunakan alias, jadi perintah di bawah ini menganggap Anda telah menginstaltrash-cli
. Saya meringkas komentar Eliah:Perintah ini menemukan dan menampilkan semua
.bak
file dan symlink di mana saja di direktori saat ini atau subdirektori atau di bawahnya.Untuk menghapusnya, tambahkan sebuah
-exec
dengantrash
perintah:-xtype f
memilih file dan symlink ke file, tetapi bukan folder. Untuk menghapus folder .bak juga, hapus bagian itu, dan gunakan-execdir
, yang menghindaricannot trash non-existent
kesalahan untuk.bak
file di dalam.bak
direktori:sumber
rm
untuk menghapus sesuatu" adalah pernyataan yang kontroversial tetapi saya harus setuju bahwa sering kali lebih bijaksana untuk menggunakan sesuatu yang akan membuat Anda membatalkan sesuatu.trash-cli
melakukan hal yang samagvfs-trash
tanpa bergantung padagvfs
.find . -name "*.bak" -type f
menampilkan apa yangtrash *.bak
dihapus. Benarkah itu yang Anda maksud? Anda dapat memindahkan direktori ke tempat sampah dengantrash
ataugvfs-trash
, tetapitrash *.bak
hanya akan memindahkan file dan direktori yang namanya berakhir dengan.bak
dan yang berada langsung di direktori saat ini. Shell mengembang*.bak
, jaditrash *.bak
tidak akan memengaruhi.bak
file dalam subdirektori yang tidak dinamai.bak
.ls *.bak
(yang saya pikir maksud Anda) mencantumkantrash *.bak
sampah apa .find . -name '*.bak' -xtype f -exec trash {} +
trash semua.bak
file di mana saja di bawah.
. Itu tidak bisa menggunakan alias, jadi instaltrash-cli
atau tulisgvfs-trash
saja. Ini sebuah contoh.-xtype f
memilih file dan symlink ke file, tetapi bukan folder. Untuk menghapus.bak
folder juga, gunakanfind . -name '*.bak' -execdir trash {} +
, yang menghindaricannot trash non existent
kesalahan untuk.bak
file di dalam.bak
direktori. Silakan menggunakan semua ini dalam jawaban Anda.Jika Anda ingin menghapus semua file dari jenis tertentu, tetapi hanya 1 folder "dalam" dari folder saat ini:
-maxdepth 2 karena direktori saat ini " . " dianggap sebagai folder pertama.
sumber
Jawaban cepat:
Hapus semua file dengan nama yang dianggap atau postfix secara rekursif:
find . -name '*.pyc' -type f -delete
Hapus semua direktori dengan nama yang dipertimbangkan secara rekursif:
Agak kurang terkontrol, tetapi dalam satu baris:
[ CATATAN ]:
d
adalah opsi direktori danf
merupakan opsi file.sumber
Jika Anda berada di dalam git repo, Anda dapat menggunakan:
Ini menghapus file dan file yang tidak terlacak dalam .gitignore.
sumber