Saya ingin menghapus file yang ukurannya antara nilai-nilai tertentu. Misalnya saya punya daftar file berikut:
-rw-r--r-- 1 smsc sys 558 Apr 30 13:07 stats.sfe.1.20120430130513.xml.Z
-rw-r--r-- 1 smsc sys 388 Apr 30 15:32 stats.sfe.1.20120430153013.xml.Z
-rw-r--r-- 1 smsc sys 386 Apr 30 15:36 stats.sfe.1.20120430153513.xml.Z
-rw-r--r-- 1 smsc sys 389 Apr 30 15:42 stats.sfe.1.20120430154013.xml.Z
-rw-r--r-- 1 smsc sys 390 Apr 30 16:02 stats.sfe.1.20120430160013.xml.Z
-rw-r--r-- 1 smsc sys 385 Apr 30 16:12 stats.sfe.1.20120430161013.xml.Z
Dari daftar di atas, saya hanya ingin menghapus file yang ukurannya bervariasi antara 386b dan 390b . Saya tahu bahwa saya dapat menggunakan perintah berikut untuk menghapus file dengan ukuran melebihi tertentu <size>
:
find . -size +<size>-delete
Tetapi bagaimana saya bisa menambahkan satu batas lagi untuk file yang ukurannya kurang dari nilai yang diberikan?
find
kondisi secara logis DANDi secara default, jadi tempelkan-size
opsi lain untuk terikat lainnya.Jawaban:
Kisaran hanyalah batas atas DAN batas bawah. Dari
find
spec :Jadi yang perlu Anda lakukan adalah menentukan batas ukuran kedua sebelum
-delete
tindakan.sumber
Di operator
-a
eksplisitAND
yang memungkinkan Anda untuk menggabungkan dua pemilihan pendahuluan. Dalam hal ini membuat rentang menggunakan-size
.find . -size +386b -a -size -390b -exec rm -f {} \;
Perhatikan bahwa ukurannya adalah argumen numerik yang secara opsional dapat ditambahkan dengan
+
dan-
. Dariman 1 find
:sumber
find
kondisinya secara logis DAN akan secara default. Jadi saya hanya menambahkan satusize
syarat lagi dan itu bekerja dengan baik! Perintah terakhir terlihat seperti:find . -maxdepth 1 -size +358c -size -395c -delete
Kapan pun
find
mengharapkan suatu angka, Anda bisa meletakkan+
tanda di depannya yang berarti lebih dari angka ini, atau-
tanda yang berarti kurang dari angka ini. Ini adalah ketidaksetaraan yang ketat:+3
dan-7
berarti 4, 5 atau 6.Dengan
-size
primer, Anda perlu menambahkan akhiranc
untuk menunjukkan bahwa nomor tersebut adalah jumlah byte. Anda dapat menggabungkan beberapa primer untuk mengambil konjungsi (dalam beberapa versi, Anda dapat menempatkan-a
atau di-and
antara mereka). Jadi:Di zsh, Anda dapat menggunakan
L
kualifikasi glob . Unit default adalah byte; sukafind
, karakter+
dan-
menunjukkan ketidaksetaraan yang ketat.(Perintah di atas tidak berulang ke dalam subdirektori; jika Anda membutuhkannya, tambahkan
**/
sebelum pola.)sumber
Salah satu cara menggunakan
perl
:sumber