この記事は、Linuxシェルに関する一連の記事の続きであり、ファイルとディレクトリを削除するための3つの最も便利な方法について説明しています。また、ファイルが大量に含まれているディレクトリを削除したり、名前に特殊文字が含まれているファイルやディレクトリを削除したりするなどの例外的なケースについても説明しました。わずか5分でLinuxスキルを向上させます。
「rmdir」コマンド
rmdirを使用する前に コマンドを実行するには、削除されたオブジェクトを簡単に復元できないことを知っておく必要があります。
LinuxまたはmacOSを使用している場合は、コマンドラインターミナルを開きます。 Windowsを使用している場合は、Windows Subsystem for Linux(WSL)を使用できます。
ディレクトリを削除する前に、まずディレクトリを作成しましょう:
$ mkdir /tmp/docs
それでは、 / tmp / docsという名前で削除しましょう。 次のコマンドを使用します:
$ rmdir /tmp/docs
rmdir 空のディレクトリを削除するためのコマンドです。ファイルシステムから重要なものを削除することから保護されているので、非常に便利です。
削除したいディレクトリ内にファイルを配置して、この動作を検証しましょう:
$ mkdir -p /tmp/docs
$ touch /tmp/docs/my_file
$ tree /tmp/docs
/tmp/docs
└── my_file
0 directories, 1 file
ディレクトリが空でない場合は、次のエラーが表示されます。
$ rmdir /tmp/docs
rmdir: /tmp/docs: Directory not empty
ファイルを含むディレクトリを削除するには、 rmを使用する必要があります コマンド:
$ rm -rf /tmp/docs
Linuxのすべてのコンソールコマンドは、ファイル名またはフォルダー名にワイルドカード(*)を使用してファイルおよびフォルダーを処理できます。次のフォルダ構造を削除しましょう:
$ tree /tmp/docs
/tmp/docs
├── dir1
├── dir2
└── dir3
3 directories, 0 files
ディレクトリから始まるすべてのディレクトリを削除するには 次のコマンドを使用する必要があります:
$ rmdir /tmp/docs/dir*
期待される結果は次のとおりです。
$ tree /tmp/docs
/tmp/docs
0 directories, 0 files
「rm」コマンド
rm コマンドは、ディレクトリだけでなくファイルも削除できる汎用コマンドです。ただし、 rmのデフォルトの動作 コマンドでは、フォルダを削除できません。 -rを使用できます または-R サブディレクトリを含むディレクトリを削除するための引数。
次のファイルシステム構造があると想像してみましょう。
$ tree /tmp/docs
/tmp/docs
├── dir1
│ └── my_file1
├── dir2
│ └── my_file2
└── dir3
└── my_file3
3 directories, 3 files
/ tmp / docsを削除する場合 ディレクトリを完全に使用するには、次のコマンドを使用します。
$ rm -rf /tmp/docs
場所:
- -r –特定のディレクトリからすべてのサブディレクトリを削除しようとします。
- -f –事前の確認または許可なしにファイルを削除しようとしました。
/ bin / rm:引数リストが長すぎます
多くのファイルがあるディレクトリを削除しようとすると、このエラーメッセージが表示される場合があります。このエラーは、 rmに提供されたファイルの数が原因で発生します コマンドが、コマンドライン引数のサイズのシステム制限を超えています。
このようなフォルダを削除する最も簡単な方法は、検索を使用することです。 最初にすべてのファイルを削除してから、ディレクトリ自体を削除するコマンド:
$ find /tmp/docs -type f -delete
$ rm -r /tmp/docs
ここ:
- / tmp / docs –検索用のディレクトリ。
- -タイプf –ファイルのみを検索するように検索ユーティリティに指示します。
- -削除 –検索ユーティリティに検索結果を削除するように指示します。
空のフォルダを作成してrsyncを使用することもできます ユーティリティ:
$ mkdir empty_dir
$ rsync -a --delete empty_dir/ /tmp/docs/
これはCPUを消費しますが、 / tmp / docsをクリーンアップするための最速の方法です。 ディレクトリ。
findコマンドは多目的検索コマンドラインユーティリティであり、それ自体に別の記事が必要ですが、この場合は、それを使用してフォルダを削除します。
パターンdir*ですべてのディレクトリを削除しましょう ネストされたディレクトリ名:
$ tree /tmp/docs
/tmp/docs
├── dir1
│ └── my_file1
├── dir2
│ └── my_file2
└── dir3
└── my_file3
3 directories, 3 files
これを行うには、次のコマンドを使用します。
$ find /tmp/docs -type d -name 'dir*' -exec rm -rf {} +
$ tree /tmp/docs
/tmp/docs
0 directories, 0 files
ここで、検索 コマンドは、名前が dirで始まるすべてのネストされたディレクトリを返します :
$ find /tmp/docs -type d -name 'dir*'
/tmp/docs/dir2
/tmp/docs/dir3
/tmp/docs/dir1
そして、すでにおなじみの rm -rfを実行します すべての検索結果に対してコマンドを実行します(そのため、 {} +を使用しています シーケンス)。
多くの場合、フォルダ構造内の空のフォルダのみを削除したい場合があります。 dir1を削除しましょう およびother_dir 次の例から:
$ tree /tmp/docs
/tmp/docs
├── dir1
├── dir2
│ └── my_file2
├── dir3
│ └── my_file3
└── other_dir
4 directories, 2 files
その方法は次のとおりです。
$ find /tmp/docs -type d -empty -delete
$ tree /tmp/docs
/tmp/docs
├── dir2
│ └── my_file2
└── dir3
└── my_file3
2 directories, 2 files
特殊文字を含むファイルを(iノードで)削除します
ディレクトリ名に特殊文字が含まれている場合、または英語以外の単語で構成されている場合は、通常の rm またはrmdir コマンドが機能しない場合があります。その場合、iノードを使用してそのディレクトリを削除できます。
iノード–ファイルシステム上のファイルまたはディレクトリを表すインデックスノード番号です。
次のコマンドを使用して、ファイルまたはディレクトリのiノード番号を見つけることができます。
$ ls -il /tmp/docs
total 0
8669007889 drwxr-xr-x 3 amaksimov wheel 96 Dec 1 18:48 dir2
8669007891 drwxr-xr-x 3 amaksimov wheel 96 Dec 1 18:46 dir3
この例では、 dir2 フォルダにiノードがあります8669007889 番号。
これで、この情報を使用して削除できます:
$ find /tmp/docs -inum 8669007889 -exec rm -rf {} +
ここ:
- -inum –findユーティリティにiノード番号8669007889のファイルシステムオブジェクトを検索するように指示します 。
- -exec rm -rf –検索ユーティリティに -rmを使用してrmを呼び出すように指示します すべての結果に対する引数( {} + 。
この記事では、Linuxでディレクトリを削除する3つの方法について説明しました。また、名前に特殊文字が含まれる巨大なフォルダやディレクトリを削除するなどの特殊なケースについても説明しました。
この記事がお役に立てば幸いです。はいの場合は、世界中に広めるのを手伝ってください。
この記事で取り上げられている可能性のある他の興味深いユースケースをご存知の場合は、下のコメントセクションからご連絡ください。