ホーム テクノロジー LINUX Linux でファイルとディレクトリを削除するには?

Linux でファイルとディレクトリを削除するには?


基本的なファイル システム管理タスクの 1 つは、さまざまな種類のファイルやディレクトリの作成、変更、削除です。ファイル削除のためのいくつかの基本的なツールと概念を知っておくと便利で、時間を節約できます。

Linux には、ファイル削除タスクの実行に役立つツールがいくつか用意されています。多くの場合、いくつかの基準に基づいて、単一のファイルやディレクトリだけでなく、多数のファイルやディレクトリを削除する必要があります。タスクを簡単に実行するには、いくつかの一般的なコマンドとその組み合わせを知っておくと役立ちます。

  • 以下のコマンドは、特に正規表現や find コマンドで一部の検索パターンを使用するものには注意して使用してください。間違った式やパターンを使用すると、重要なデータ/システム ファイル、または単に意図されていないファイルが削除される可能性があります。
  • 重要なデータとシステム ファイルの最新のバックアップを常に確保してください。
  • このようなコマンドを実行する前に、特に Sudo またはスーパーユーザー (root) としてコマンドを実行する場合は注意してください。

リンク解除を使用して削除する

それほど人気はありません。単一のファイルを完全に削除するには、 unlinkコマンドを使用します。

 $ unlink {file-name}

単一のファイルを削除する

ファイルを削除するためにより一般的に使用されるコマンド、つまり、1 つ以上のファイルの同時削除をサポートするrmコマンドがあります。

 $ rm {file-name}

rm書き込み保護されているファイルの削除を確認するプロンプトを表示し、それ以外の場合はファイルを直接削除します。ファイルを削除する前にrm常にプロンプ​​トを表示するには、 -iフラグを使用します。

 $ rm -i {file-name}

rmコマンドは画面にメッセージを表示せずに削除します。 rmコマンドが実際に行っていることをリストするには、 -vフラグを付けて rm を使用します。

 $ rm -v {file-name}

確認を求めるプロンプトを表示せずに書き込み保護されたファイルを削除するには、 -fフラグを使用します。

 $ rm -f {file-name}

複数のファイルを削除する

rmに引数として複数のファイル名を指定することで、複数のファイルを削除できます。

 $ rm {file-name-1} {file-name-2} {file-name-3} ... {file-name-N}

rm正規表現もサポートしています。 file-name-*という名前のファイルをすべて削除したい場合は、次のコマンドを使用できます。

 $ rm file-name-*

正規表現を使用して複数のファイルを指定することもできます。 file-name-1file-name-2file-name-3に一致する 3 つのファイルを削除したい場合は、次のようなものを使用できます。

 $ rm file-name-[123]

ディレクトリを削除する

空のディレクトリは、 -dオプションを指定したrmコマンドを使用して削除できます。

 $ rm -d {dir-name}

ファイルの削除でサポートされているオプションは、 -dフラグを使用してディレクトリの削除と組み合わせることもできます。例えば:

 $ rm -idv {dir-name}

空ではないディレクトリを削除するには、 -rフラグを使用します。

 $ rm -r {dir-name}

ディレクトリとその内容を削除する前にプロンプ​​トを表示したくない場合は、 -rfフラグを使用します。これにより、確認なしにディレクトリ自体を含むディレクトリ内のすべてが削除されます。特に root として使用する場合は注意してください。

 $ rm -rf {dir-name}

ファイルの検索と削除

より複雑な要件の場合は、さまざまなオプションを指定して find コマンドを使用できます。 {dir-to-search}で指定されたパス内のパターン{pattern}に一致するすべてのファイルを削除するには

$ find {dir-to-search} -type f -name {pattern} -exec rm -f {} \;

例:

 $ find /var/tmp -type f -name "*.tmp" -exec rm -f {} \;

{dir-to-search}内のディレクトリを含む、パターン{pattern}に一致するものをすべて削除したい場合は、上記のコマンドを次のように少し変更します。

 $ find {dir-to-search} -name {pattern} -exec rm -rf {} \;

find コマンドの最新バージョンは、内部で削除機能をサポートしています。ここで、 -deleteフラグは rm コマンドを置き換えますが、 -depth 、ディレクトリ自体の前に最初にディレクトリの内容を処理するように find コマンドに指示します。

 $ find {dir-to-search} -type f -name {file-name-pattern} -depth -delete

上記の例は、一致したファイルごとにrmコマンドの新しい外部プロセスを生成しないため、多数のファイルを操作する場合により効率的です。ただし、 findコマンドのすべてのバージョンが (まだ) -deleteフラグをサポートしているわけではありません。代わりに、以下の例に示すように、 xargsコマンドをfindとともに使用するオプションがあります。

 $ find {dir-to-search} -type f -name {pattern} -print0 | xargs -0 rm

または、exec コマンドの+ターミネータを使用して、xargs のように find コマンドで見つかったすべてのものを連結します。

 $ find {dir-to-search} -name {pattern} -exec rm -rf {} +

デフォルトでは、find コマンドは-printフラグを使用しますが、通常はこのフラグの書き込みを省略します。 xargsを使用する場合、各ファイル名の間にnew-line文字が入らないようにする必要があります。そのため、 -print0フラグは、見つかったすべてのファイル名の後にnull文字を出力するよう find に指示します。

同様に、両方のコマンドが結合されるように、 xargs-0フラグを指定します。ここでのrmコマンドは、パイプされたfind入力によって渡されたファイルを削除します。たとえば、次のコマンドは、現在のユーザーのホーム ディレクトリ ( ~記号で指定) からすべての*.tmpファイルを検索して削除します。

 $ find ~ -name "*.tmp" -print0 | xargs -0 rm

findコマンドには、所有権、アクセス許可、タイムスタンプなどを含むファイルやディレクトリを検索するためのいくつかの方法が用意されています。特定のファイル削除タスクに役立ついくつかの方法について説明します。

ユーザーによるファイルの検索と削除

特定のuserが所有する特定のディレクトリ内のすべてを削除するには、次を使用します。

 $ find {dir-to-search} -mindepth 1 -user {user-name} -delete

上記の例では、値 1 の-mindepthフラグにより{dir-to-search}で指定されたディレクトリが検索パターンと条件に一致する場合に削除されなくなります。または、特定のgroupに属する指定されたディレクトリ内のすべてを削除するには、次を使用します。

 $ find {dir-to-search} -mindepth 1 -group {group-name} -delete

検索パスの下のサブディレクトリを走査したくない場合は、適切なディレクトリの深さの値を指定して-maxdepthを使用するオプションもあります。

実行例を次に示します。

 $ find tempdir/ -mindepth 1 -maxdepth 1 -user abhisheknair -group abhisheknair -delete

代わりにuser-idgroup-idを指定したい場合は、次のようなことを試すことができます。

 $ find {dir-to-search} -mindepth 1 -uid {user-id} -gid {group-id} -delete

空のディレクトリを見つけて削除する

指定されたパス{dir-to-search}内の空のディレクトリをすべて削除するには、次を使用できます。

 $ find {dir-to-search} -type d -empty -delete

代わりに、指定されたパス{dir-to-search}内の空のファイルをすべて削除するには、次を使用します。

 $ find {dir-to-search} -type f -empty -delete

X より古いファイルを検索して削除する

場合によっては、 x日より古いファイルを削除する必要があるかもしれません。 find には、ファイルの作成時間 ( ctime )、アクセス時間 ( atime )、および変更時間 ( mtime ) を読み取るオプションがあります。 find でmtimeオプションを使用すると、 x日以上前に変更されたファイルを検索して削除できます。

 $ find {dir-to-search} -type f -mtime +{X} -delete

たとえば、 /var/tmp内の変更時刻が 30 日以上前で、拡張子が log であるすべてのファイルを削除するには、次のコマンドを使用できます。

 $ find /var/tmp -name "*.log" -type f -mtime +30 -delete

許可に基づいてファイルを検索して削除します

今後は、次のような特定の権限に基づいてファイルを削除することもできます。

 $ find {dir-to-search} -name {pattern} -perm {NNN} -delete

例:

 $ find /var/tmp -name "temp*" -perm 755 -delete

または、許可にシンボリック形式を使用したい場合は、次を使用します。

 $ find {dir-to-search} -name {pattern} -perm u={rwx},g={rwx},o={rwx} -delete

例:

 $ find /var/tmp -name "temp*" -perm u=rwx,g=rw,o=rw -delete

まとめ

Linux には、単純で正規表現を使用して簡単に拡張できるunlinkrm 、およびrmdirコマンドが用意されています。より高度なニーズについては、 findxargsなどのツールを組み合わせて使用​​して、必要なことを実現するオプションがあります。この記事の例以外にも、find を使用可能なフラグとともに使用して検索をカスタマイズするオプションがあります。詳細については、各コマンドのマニュアル ページを参照してください。

常にrmまたは-deleteフラグを指定せずに find コマンドを実行し、その出力を分析して、実際のコマンドの実行によってどのファイルまたはディレクトリが影響を受けるかを確認してください。適切なバックアップ構成とポリシーがあると、誤って削除した場合だけでなく、ハードウェア障害やサイバー攻撃が発生した場合にも役立ちます。

「 Linux でファイルとディレクトリを削除するには?」についてわかりやすく解説!絶対に観るべきベスト2動画

【Linux 入門編】ディレクトリ作成・削除のコマンド【サーバー】#エンジニア #プログラミング #linux
Linuxディレクトリ構造を完全解説!