
ファイルがありますファイル名_1、ファイル名_2...ファイル名_100000ここでファイル名は連番になっています。例えば、インデックスが0より大きいファイルを削除するにはどうすればいいでしょうか?100?
答え1
ファイル名に連番が付けられている場合は、次のコマンドを実行します。
rm fileName_{100..100000}
答え2
このコマンドも試してみてください。
for i in $(seq 100 100000); do rm fileName_$i; done
ファイル名に連続した数字が含まれている場合、すべてのファイル (100 から 100000 までの範囲) が削除されます。
答え3
一般的に、これを実現するにはいくつかの方法があります。
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 {} \;
は、プログラムを約 100,000 回起動しますrm
が、最後を に置き換える\;
と、サブプロセスの数を最小限にしようとします。どちらの方法も、外部コマンドをまったく使用せず、代わりにシステム コールを呼び出す を使用する+
よりも (かなり、または少し) 遅くなる可能性があります。-delete
しかし、いつもまず、パターンが実際にターゲットとするファイルと一致するかどうかを確認します。
stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]'
askubuntu/filename_1
したがって、この場合は、保持したいファイルを削除し、削除すべきファイルは残すことになります。
答え4
次のコマンドを使用します。
find . -name 'fileName_[100-100000]' -exec rm {} \;
これにより、100 から 100000 までのファイルが削除されます。
詳しくは:サイト