ディレクトリ内のすべてのファイルを削除する方法は?


76

ディレクトリ内のすべてのファイルとサブディレクトリを削除しようとしています。以前rm -rはすべてのファイルを削除していましたが、最上位ディレクトリ自体を除くすべてのファイルサブディレクトリを削除したいです。

たとえば、のようなトップディレクトリがありimagesます。ファイルheader.pngfooter.pngおよびサブディレクトリが含まれています。

ここで、サブディレクトリを削除しますがheader.pngfooter.pngではありませんimages

Linuxでこれを行うにはどうすればよいですか?


1
ディレクトリにcdしてrm -Rf、そこにあるすべてのファイルとディレクトリを実行します。
ヌファルイブラヒム

回答:


59

最上位ディレクトリが呼び出されるimages場合、を実行しrm -r images/*ます。これは、シェルglob演算子*を使用して、rm -r内のすべてのファイルまたはディレクトリで実行しますimages


30
隠しファイルは削除されません。
-reto

51

隠しファイルを削除するには、次を指定する必要があります。

rm -r images/* images/.*

globに.およびが含まれるシェルでは..、次のようなエラーが発生します。

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

ただし、隠しファイルは削除されます。

エラーメッセージのないアプローチは、mindepthでfind / deleteを使用することです。これはgnu-findです。

find images -mindepth 1 -delete

あなたの検索が欠けていること-mindepth-delete述語、その場合には、あなたが行うことができました:

find images/. ! -name . -prune -exec rm -rf {} +

私の提案は、「images / ..」ではなく「images /../ ..」に一致する「rm -r images /.*」を使用することでした。'images /../ images / ..'は再び同じディレクトリであるため、再帰は上に移動できません。
ユーザー不明

4
@DarkHeart rm .*、GNUユーティリティでは少なくとも1994年以降、UNIXでは70年代後半以降、削除しない...、削除していません。博物館の外でファイルシステムを上にたどるシステムを見つけることはほとんどありません。rm .*
テルドン

21

ディレクトリ内のすべてのファイルとディレクトリ(非表示のものを含む)を削除するには、次を試してください。

  • ls -Abすべてのファイル/ディレクトリの一致に使用

    cd dir_name && rm -rf `ls -Ab`
    
  • findすべてのファイル/ディレクトリの一致に使用

    find dir_name -mindepth 1 -delete
    

    または、findサポートしていない場合-delete

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • フォルダを削除してから再作成します

    rm -rf dir_name && mkdir dir_name
    
  • バッシュで、

    shopt -s dotglob  
    rm -rf dir_name/*
    

以下のようなコマンド注rm -rf *ファイルが始まるので、あなたは、ディレクトリ内のファイルの知識がない場合は安全ではありません-(ハイフン)として解釈されますrm...旗
VasyaNovikov

1
編集:それを安全に行うために使用rm -rf ./* ./.*
-VasyaNovikov

9

ディレクトリ内のすべての通常ファイルを再帰的に削除するには、次のコマンド(GNUまたはFreeBSDを想定find)で十分です。

find . -type f -delete

これにより、シンボリックリンク(通常のファイルを指しているかどうかに関係なく)、ディレクトリ、fifo、ソケット、デバイスなどのすべての非正規ファイルが残ります...

こちらもご覧ください:

find . ! -type d -delete

directory以外の任意のタイプのファイルを削除します。


6

このバージョンを試してください:

 rm -r test/*

1
これにより、隠しファイル(「。」で始まるファイル)は削除されません。
gbmhunter

3

findここでコマンドを使用しています:

ステップ1:すべてのファイルを見つけて削除します。

find /path/to/directory/ -type f -exec rm {} \;

例:

find /home/user/Desktop/images/ -type f -exec rm {} \;

ステップ2:すべてのサブディレクトリを見つけて削除します:

find /path/to/directory/ -type d -exec rm -R {} \;

find /path/to/directory/ -type dinclude .を使用すると、ディレクトリ自体が削除されます。-mindepth他の人が言ったように、スイッチも使用する必要があります。
アーサータッカ

3

質問は、ディレクトリを空にすることです=隠しファイルを含むディレクトリの内容を削除しますが、ディレクトリ自体は削除しませんでした。-mindepth 1を使用したfindコマンドは実際には正しい方法ですが、エラーメッセージを回避するには、-maxdepth 1と結合する必要があります。

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;

0

rmの構文は次のとおりです。

rm [OPTION]... FILE...

したがって、適切なパスを明示的に指定する必要があります。例えば

rm -r sub_dir/

0

次のコマンドを使用してディレクトリを削除できます。

sudo rm -r directoryname1/2/3/*

3 / *の後にディレクトリ全体が削除されます。

例sudo rm -r Downloads / song / *

内にあるすべてのファイルが削除されますDownloads/song


0

これは私にとって完璧に機能し、いくつかのバリエーションが毎回機能することをテストしました。

imagesディレクトリを保持するディレクトリから。

rm -frd ./images/*

前:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

後:

images/

元の質問で明確にされたかどうかはわかりませんが、dotglobを有効にしない限り、これは画像の下の「ドットファイル」またはドットディレクトリをスキップします(mkdir images/.somedir; touch images/.somefile
Jeff Schaller

0

エラーメッセージなしで、非表示のものを含め、現在のディレクトリ内のすべてのファイルとサブディレクトリを削除するには:

rm -rf .[^.] .??* *

または、親ディレクトリから:

rm -rf images/.[^.] images/.??* images/*

https://serverfault.com/a/47940/269538から。



-2

フォルダ「test」と内部のすべてのファイルを削除します。

 rm -r test

内部のすべてのファイルを削除しますが、フォルダー「test」を保持します。

 rm -r test/*

-4

フォルダーにcdし、次のコマンドを実行します。

ls |xargs rm -rf

2
これは、空白を含むファイル名では失敗します。lsの出力を他のコマンドへの入力として使用しないことをお勧めします。これは一般に安全ではありません。
dhag
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.