Bash
刪除文件的低版本號
我有這些文件:
atk-2.8.0-ia64-11.31.depot gtk+2-2.24.25-ia64-11.31.depot lzo-2.09-ia64-11.31.depot bash-4.3.030-ia64-11.31.depot gtk+3-3.6.5-ia64-11.31.depot m4-1.4.17-ia64-11.31.depot bash-4.3.033-ia64-11.31.depot harfbuzz-0.9.35-ia64-11.31.depot make-4.1-ia64-11.31.depot bzip2-1.0.6-ia64-11.31.depot harfbuzz-0.9.36-ia64-11.31.depot Mesa-7.4.4-ia64-11.31.depot cairo-1.14.0-ia64-11.31.depot harfbuzz-0.9.37-ia64-11.31.depot ncurses-5.9-ia64-11.31.depot coreutils-8.23-ia64-11.31.depot harfbuzz-0.9.38-ia64-11.31.depot nettle-2.7.1-ia64-11.31.depot cups-1.7.5-ia64-11.31.depot heimdal-1.5.2-ia64-11.31.depot openldap-2.4.40-ia64-11.31.depot cyrus_sasl-2.1.26-ia64-11.31.depot installed_packages.txt openssl-1.0.1j-ia64-11.31.depot db-6.0.20-ia64-11.31.depot jasper-1.900.1-ia64-11.31.depot openssl-1.0.1k-ia64-11.31.depot editline-2.9-ia64-11.31.depot jpeg-9.1.0-ia64-11.31.depot openssl-1.0.1l-ia64-11.31.depot expat-2.1.0-ia64-11.31.depot lcms2-2.6-ia64-11.31.depot openssl-1.0.2-ia64-11.31.depot findutils-4.4.2-ia64-11.31.depot lcms-1.19-ia64-11.31.depot p11_kit-0.22.1-ia64-11.31.depot flex-2.5.39-ia64-11.31.depot ldns-1.6.17-ia64-11.31.depot packages-ia64-11.31.gz fontconfig-2.11.1-ia64-11.31.depot libcroco-0.6.8-ia64-11.31.depot pango-1.36.8-ia64-11.31.depot freetype-2.5.3-ia64-11.31.depot libffi-3.1-ia64-11.31.depot pcre-8.36-ia64-11.31.depot freetype-2.5.5-ia64-11.31.depot libffi-3.2.1-ia64-11.31.depot pixman-0.32.6-ia64-11.31.depot gdk_pixbuf-2.28.2-ia64-11.31.depot libgcrypt-1.6.2-ia64-11.31.depot popt-1.16-ia64-11.31.depot gettext-0.19.3-ia64-11.31.depot libgpg_error-1.17-ia64-11.31.depot readline-6.3.008-ia64-11.31.depot gettext-0.19.4-ia64-11.31.depot libgpg_error-1.18-ia64-11.31.depot rsync-3.1.1-ia64-11.31.depot ghostscript-9.06.0-ia64-11.31.depot libgsf-1.14.30-ia64-11.31.depot tar-1.28-ia64-11.31.depot ghostscript-9.14.0-ia64-11.31.depot libiconv-1.14-ia64-11.31.depot termcap-1.3.1-ia64-11.31.depot glib2-2.34.3-ia64-11.31.depot libidn-1.29-ia64-11.31.depot tiff-4.0.3-ia64-11.31.depot gmp-5.0.5-ia64-11.31.depot libpng-1.6.8-ia64-11.31.depot unbound-1.4.22-ia64-11.31.depot gnutls-3.3.10-ia64-11.31.depot librsvg-2.40.5-ia64-11.31.depot unbound-1.5.0-ia64-11.31.depot gnutls-3.3.11-ia64-11.31.depot libtasn1-4.2-ia64-11.31.depot unbound-1.5.1-ia64-11.31.depot gnutls-3.3.12-ia64-11.31.depot libXft-2.3.2-ia64-11.31.depot vim-7.4-ia64-11.31.depot gnutls-3.3.9-ia64-11.31.depot libxml2-2.9.1-ia64-11.31.depot xz-5.0.7-ia64-11.31.depot grep-2.20-ia64-11.31.depot libxml2-2.9.2-ia64-11.31.depot xz-5.2.0-ia64-11.31.depot grep-2.21-ia64-11.31.depot libXrender-0.9.8-ia64-11.31.depot zlib-1.2.8-ia64-11.31.depot gtk+2-2.24.24-ia64-11.31.depot lzo-2.08-ia64-11.31.depot
其中一些版本號較舊,我想刪除所有具有次要版本號的重複文件。是否可以使用 bash 腳本?還是awk?
可以通過 GNU
ls
+awk
one-liner 來完成:ls -vr *.depot | awk -F- '$1 == name{system ("rm \""$0"\"")}{name=$1}'
說明:文件名作為輸入傳遞給 awk 腳本。這些選項
-vr
導致文件名按版本號以相反的順序排序,因此例如foo-1.9.depot
在foo-1.10.depot
. awk 腳本將名稱的第一部分(直到第一部分-
)儲存在變數 中name
。噹噹前名稱的第一部分與前一個名稱的第一部分相同時,呼叫腳本rm
來刪除目前文件(這是舊版本)。