コマンドラインで特定のファイルを削除する

コマンドラインで特定のファイルを削除する

ファイルがありますファイル名_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 までのファイルが削除されます。

詳しくは:サイト

関連情報