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


8

fileName_1fileName_2 ... fileName_100000のファイルがあり、fileNameは順番に番号が付けられています。インデックスが100より大きいファイルを削除するにはどうすればよいですか?

回答:


17

ファイル名に連番が付けられている場合は、次のコマンドを実行するだけです。

rm fileName_{100..100000}

3
情報:これは、bash(シェル)がを{x..y}リスト全体に展開するため機能します。たとえば、使用echo test{1..3}すると、展開echo test1 test2 test3されて実行されます。ご覧のとおり、印刷されtest1 test2 test3ます。同様に、{x..y}が引数に関連付けられていない場合は、そこに数値を置くだけです。たとえば、echo test {1..3}単に印刷しますtest 1 2 3
Luc

1
注:execプロセスが持つことができる引数の数への呼び出しによって課される制限があります。で取得できますgetconf ARG_MAX。たとえば、私のシステムでは2097152(約210万)です。これは、rm(組み込みではない)がそれより多くのファイルで失敗することを意味します。組み込みコマンドにはこの問題はなく、提案されている他の解決策にもありません。
バクリウ2014年

ARG_MAXはバイト数であり、引数の数ではないことに注意してください。rmは、2097152ファイルの削除を一度に処理できません。これは、それぞれ1023バイトの長さ(1024ではなく、引数間の区切り文字(Cランドでは\ 0)が制限に向かってカウントされる)を持つ2048ファイルを削除する可能性があります。
godlygeek

6

このコマンドを試すこともできます、

for i in $(seq 100 100000); do rm fileName_$i; done

ファイル名に連続した番号が含まれている場合は、すべてのファイル(100〜100000の範囲)を削除します。


5

一般に、これを実現するにはいくつかの方法があります。

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

したがって、この場合は、残しておきたいファイルを削除し、削除すべきファイルを残します。


4

次のコマンドを使用します。

find . -name 'fileName_[100-100000]' -exec rm {} \;

これにより、100〜100000のファイルが削除されます。

詳細:サイト


あなたは使う+よりもましだろう\;- ここを見てください。または、もっと良いのは、findの-deleteコマンドを使用することです。
evilsoup 2014年

私はこれをテストし、fileName_1のみを削除しました。[100-100000] 文字クラスは、単一の文字にマッチし、それが唯一の0または1を一致させることができます
deltab
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.