Saya memiliki direktori yang berisi file dengan nama
rho_0.txt
rho_5000.txt
rho_10000.txt
rho_150000.txt
rho_200000.txt
dan seterusnya. Saya ingin menghapus semua yang merupakan kelipatan dari 5000.
Saya mencoba yang berikut:, printf 'rho_%d.txt\n' $(seq 5000 10000 25000) | rm
tapi itu memberi saya respons rm: missing operand
.
Apakah ada cara lain untuk melakukan ini?
ls
terlebih dahulu.Jawaban:
Anda tidak perlu perulangan atau perintah tambahan di tempat yang Anda miliki
Bash Shell Brace Expansion
.Penjelasan :
{start..end..step}
. Untuk-f
mengabaikan prompt pada file yang tidak ada.Ps Untuk menjaga keamanan dan memeriksa file mana yang akan dihapus, silakan lakukan tes terlebih dahulu dengan:
sumber
rm
tidak membaca dari input standar. Anda bisa melakukannya:Saya menyertakan
-i
opsi untukrm
meminta sebelum dihapus agar Anda dapat memverifikasi perilaku tersebut. Setelah yakin melakukan apa yang diinginkan, Anda dapat menghilangkan opsi itu.Sunting: Atau, Anda dapat melakukan:
Formulir itu mungkin lebih akrab jika Anda telah melakukan pemrograman apa pun.
sumber
Anda tidak dapat mem-pipe ke suatu program seolah-olah konten dari pipa adalah argumen. Ini dikirim melalui stdin.
Anda harus menggunakan xarg untuk tujuan ini:
tetapi pertama-tama Anda dapat mencoba dengan gema untuk melihat apakah semuanya seperti yang Anda inginkan:
sumber
seq
memiliki opsi-f
/--format
Anda dapat menggunakannya alih-alih ini bekerja denganprintf
dan substitusi perintah.Seseorang mengoreksi saya jika saya salah, tetapi jika semua file yang dimulai dengan
rho_
formulir ini, tidak setara dengan yang harus dilakukanKarena angka (selain 0) adalah kelipatan dari 5000 jika dan hanya jika berakhir pada 0000 atau 5000.
(0 adalah kasus khusus, karena merupakan kelipatan dari 5000, tetapi biasanya ditulis tanpa nol awal tambahan. Jika Anda tidak bermaksud memasukkan 0, maka keluarkan dari baris di atas.)
Tentu saja ini hanya boleh digunakan jika semua
rho_*.txt
file dalam direktori Anda memiliki bentuk yang diinginkan. Jangan menggunakannya jika direktori Anda juga mengandungrho_please_dont_delete_me_5000.txt
.(Catatan matematika: Ini bekerja tepat karena semua faktor prima dari 5000, yaitu 2 dan 5, juga merupakan faktor utama dari basis tempat kami bekerja, 10. Sama halnya, ada kekuatan 10 yang cukup besar (yaitu 10.000) yang merupakan habis dibagi 5000. Tidak ada trik serupa untuk mencocokkan semua yang merupakan kelipatan dari 3000.)
sumber