Command-Line

刪除具有相同前綴的多個文件(參數列表太長)

  • May 23, 2022

我試過使用這裡給出的答案,但它似乎沒有用。以下是我嘗試在我的 CentOS 系統上刪除此目錄中帶有 index.php 前綴的所有文件的命令。前兩個似乎已經執行但什麼也沒做?

$ find . -prune -name 'index.php.*' -exec rm {} +
$ find . -prune -name 'index*' -exec rm {} +
$ rm index.php*
-bash: /usr/bin/rm: Argument list too long

假設我們有這個測試文件的測試數據集:

$ tree
.
├── index.php
├── index.php.bar
├── index.php.foo
├── keppme.php
└── level1
   ├── index.php
   ├── index.php.l1
   ├── keepme.php
   └── level2
       ├── index.php
       ├── index.php.foo
       └── keepme.php

刪除所有以 開頭的文件index.php

$ find . -type f -name 'index.php*' -delete

然後測試文件如下所示:

$ tree
.
├── keppme.php
└── level1
   ├── keepme.php
   └── level2
       └── keepme.php

刪除那些在.php副檔名後添加的內容(如lindex.php.foo)但保留index.php

$ find . -type f -name 'index.php.*' -delete

然後測試數據顯示:

$ tree
.
├── index.php
├── keppme.php
└── level1
   ├── index.php
   ├── keepme.php
   └── level2
       ├── index.php
       └── keepme.php

相反,使用-delete選項,您還可以選擇xargs並行刪除文件。有時為了刪除大文件集合,這可以加快整個過程,但並非總是如此。

在每個核心/cpu 上執行命令,每次呼叫rm最大100文件數:rm

$ find . -type f -name 'index.php.*' -print0 | xargs -r0 -P $(nproc) -n 100 rm

引用自:https://unix.stackexchange.com/questions/631630