Anda benar-benar perpipaan rm
's keluaran ke input dari find
. Yang Anda inginkan adalah menggunakan output find
sebagai argumen untuk rm
:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargs
adalah perintah yang "mengubah" input standarnya menjadi argumen dari program lain, atau, karena mereka lebih akurat meletakkannya di man
halaman,
membangun dan mengeksekusi baris perintah dari input standar
Perhatikan bahwa jika nama file dapat berisi karakter spasi, Anda harus memperbaikinya:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
Tetapi sebenarnya, find
memiliki jalan pintas untuk ini: -delete
opsi:
find -type f -name '*.sql' -mtime +15 -delete
Harap perhatikan peringatan berikut di man find
:
Warnings: Don't forget that the find command line is evaluated
as an expression, so putting -delete first will make find try to
delete everything below the starting points you specified. When
testing a find command line that you later intend to use with
-delete, you should explicitly specify -depth in order to avoid
later surprises. Because -delete implies -depth, you cannot
usefully use -prune and -delete together.
PS Perhatikan bahwa pemipaan langsung ke rm
bukan merupakan opsi, karena rm
tidak mengharapkan nama file pada input standar. Apa yang Anda lakukan saat ini adalah memipkannya ke belakang.