同じプレフィックスを持つ複数のファイルを削除する(引数リストが多すぎます)

同じプレフィックスを持つ複数のファイルを削除する(引数リストが多すぎます)

ここで提供された答えを試してみましたが、うまくいかないようです。以下は、CentOSシステムのこのディレクトリからindex.phpプレフィックスが付いたすべてのファイルを削除しようとしたコマンドです。最初の2人は逃げているようだったが、何もしなかったのですか?

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

ベストアンサー1

テストファイルのテストデータセットがあるとします。

$ 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

-deletexargsオプションを使用する代わりに、ファイルを並列に削除することもできます。場合によっては、大容量ファイルコレクションの場合、それらを削除するとプロセス全体が高速化される可能性がありますが、必ずしもそうではありません。

rm100呼び出しごとの最大ファイル数を使用して、各コア/ CPUでコマンドを実行しますrm

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

おすすめ記事