Linux でファイルを削除するさまざまな方法の効率の比較

Linux でファイルを削除するさまざまな方法の効率の比較

Linux で大量のファイルを削除する効率をテストします。

まず500,000個のファイルを作成する

$ test for i in $(seq 1 500000);do echo text >>$i.txt;done

1. rm 削除

$ 時間 rm -f *
zsh: /home/hungerr/test [yn] 内のすべてのファイルを削除してもよろしいですか? y
zsh: 引数リストが長すぎます: rm
rm -f * 3.63秒 ユーザー 0.29秒 システム 98% CPU 3.985 合計

ファイル数が多いため、rm は機能しません。

2. 検索して削除する

$ time find ./ -type f -exec rm {} \;
find ./ -type f -exec rm {} \; 49.86秒 ユーザー 1032.13秒 システム 41% CPU 43:19.17 合計

コンピューターで約 43 分。 。 。 。 。 。動画を見ながら削除しました。

3. 削除して検索

$ 時間を見つける ./ -type f -delete
find ./ -type f -delete 0.43秒 ユーザー 11.21秒 システム 2% CPU 9:13.38 合計

9分かかります。

4. rsync削除

# まず空のフォルダblanktestを作成します
$ time rsync -a --delete blanktest/ test/
rsync -a --delete blanktest/ test/ 0.59秒 ユーザー 7.86秒 システム 51% CPU 16.418 合計16秒

非常に優れており、強力です。

5. Python 削除

インポートOS
インポートtimeit
 
main() を定義します:  
  os.walk('/home/username/test') のパス名、ディレクトリ名、ファイル名の場合:    
    ファイル名のファイル名の場合:      
      ファイル = os.path.join(パス名,ファイル名)      
      os.remove(ファイル)     
__name__ == '__main__' の場合:
t = timeit.Timer('main()','__main__ から main をインポート')
t.timeit(1) を印刷する 
 1
2
$ pythonテスト.py 529.309022903

約9分かかります。

6. Perl 削除

$ time perl -e 'for(<*>){((stat)[9]<(unlink))}'
perl -e 'for(<*>){((stat)[9]<(unlink))}' 1.28秒 ユーザー 7.23秒 システム 50% CPU 16.784 合計16秒

これが最速のはずです。

7. 結果:

  • rm: 使用できるファイルが多すぎます
  • -exec で 500,000 個のファイルを検索すると 43 分かかりました
  • -delete で検索 9 分
  • Perl 16sPython 9分
  • -delete 16s を使用した rsync

結論: rsync は、多数の小さなファイルを削除する最も高速で便利な方法です。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Linuxファイル削除後にスペースが解放されない問題の詳しい説明
  • Linux ファイル管理コマンド例の分析 [権限、作成、削除、コピー、移動、検索など]
  • Linuxでファイルを削除してもスペースが解放されない問題の対処方法
  • Linux のリンク解除機能とファイルの削除方法
  • Linux は MySQL データベースのスケジュールされたバックアップを実装し、30 日以上前のバックアップ ファイルを削除します。
  • Linux は定期的に MySQL データベースをバックアップし、以前のバックアップ ファイルを削除します (推奨)
  • Linux サーバーでフォルダー、ファイル、解凍コマンドを削除する方法
  • Linux で大きなファイルの内容を消去または削除する 5 つの方法

<<:  vue の v-bind を理解する

>>:  MySQL mysqldump の使い方の詳しい説明

推薦する

開発者がデータベースロックを詳細に理解する必要がある理由

1.ロックしますか? 1.1 ロックとは何ですか?ロックの本当の意味は、鍵またはコードで開くことがで...

Reactを使用する際の7つの落とし穴のまとめ

目次1. コンポーネントの肥大化2. 状態を直接変更する3. プロパティは数値を渡す必要があるが文字...

ミニマルなウェブサイトデザインの例

Web アプリケーション クラス1. みんなのためにダウンまたは私だけのためにこのウェブサイトは、ウ...

docker と docker-compose による eureka の高可用性の実現の詳細な説明

最近、新しいプロジェクトでは springcloud と docker が使用されています。この 2...

Ubuntu 18.04 は pyenv、pyenv-virtualenv、virtualenv、Numpy、SciPy、Pillow、Matplotlib をインストールします

1. 現在、Pythonのバージョン管理ツールは数多く存在します。その中でも比較的使いやすいのがPy...

モバイル開発における 1px ラインの理解と解決策

1pxの線が太くなる理由モバイルプロジェクトに取り組むとき、設計図に従って要素ノードのサイズとスタイ...

HTML で複数のクラス属性を定義する場合の無効な解決策

HTML を記述する過程で、クラス属性に複数の値を定義することがよくありますが、定義した値が無効であ...

CSS3 フリップカード番号サンプルコード

今日会社から課題をもらったのですが、効果図は以下のとおりです。 どのような効果を実現したいかは特に決...

Vue3.0 + TypeScript + Vite初体験の詳しい説明

目次プロジェクトの作成プロジェクト構造メイン.jsアプリ.vue:設定コンポジションAPI参照反応的...

MySQL ディープ ページング (数千万のデータを素早くページ分割する方法)

目次序文場合最適化まとめ序文バックエンド開発では、一度に大量のデータがロードされ、メモリやディスク ...

axiosリクエストをvueでカプセル化する方法

実際、Vueでaxiosをカプセル化するのは非常に簡単ですまず、srcパスにhttpフォルダを作成し...

HTML で自動ページジャンプを実現する 5 つの方法

前回の記事では、HTML ページが 3 秒後に自動的にジャンプする一般的な 3 つの方法を紹介しまし...

MySQL Workbench の使い方チュートリアルの詳しい説明

目次(I) Workbenchを使用してデータベースを操作する①データベースを作成する② データベー...

docker nginxコンテナの起動とローカルへのマウントの詳細な説明

まず、nginx コンテナ内の構造:コンテナを入力します: docker exec -it b511...

プロトタイプとプロトタイプチェーン プロトタイプとプロトタイプの詳細

目次1. プロトタイプ2. プロトタイプチェーン2.1 コンストラクタ2.2 電話をかける/申し込む...