回答:
ファイル名に連番が付けられている場合は、次のコマンドを実行するだけです。
rm fileName_{100..100000}
execプロセスが持つことができる引数の数への呼び出しによって課される制限があります。で取得できますgetconf ARG_MAX。たとえば、私のシステムでは2097152(約210万)です。これは、rm(組み込みではない)がそれより多くのファイルで失敗することを意味します。組み込みコマンドにはこの問題はなく、提案されている他の解決策にもありません。
一般に、これを実現するにはいくつかの方法があります。
rm fileName_{100..100000}
シェルによって約100,000のファイル名に展開されます。ベース名が長いパスであり、数が十分に多い場合、この方法では実際にコマンドラインの最大長を超える可能性があります。
forループ
for i in $(seq 100 100000); do rm fileName_$i; done
シェルは変数の置換を実行し、rmを約100,000回起動する必要があるため、この問題の影響を受けませんが、ファイルを削除する比較的遅い方法です。
上記のどちらの方法でも、一部のファイルfilename_101が欠落していると警告が表示される場合があります。
通常、(に基づいてfind)実際にそこにあるファイルでのみ機能するため、に基づくソリューションの方が優れています。ただし、微妙な違いがいくつかあります。
find . -name 'fileName_[100-100000]' -exec rm {} \;
rm最終的に置き換えること\;により+、サブプロセスの数を最小限に抑えようとしながら、プログラムはまだ約10万回起動します。どちらの方法も、-delete外部コマンドをまったく使用せず、代わりにシステムコールを呼び出す方法よりも(かなりまたは少し)遅くなるでしょう。
ただし、パターンが実際に対象とするファイルと一致するかどうかを常に最初に確認します。
stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]'
askubuntu/filename_1
したがって、この場合は、残しておきたいファイルを削除し、削除すべきファイルを残します。
{x..y}リスト全体に展開するため機能します。たとえば、使用echo test{1..3}すると、展開echo test1 test2 test3されて実行されます。ご覧のとおり、印刷されtest1 test2 test3ます。同様に、{x..y}が引数に関連付けられていない場合は、そこに数値を置くだけです。たとえば、echo test {1..3}単に印刷しますtest 1 2 3。