ディレクトリからすべてのファイルを削除するには?

私が得た最も近いのは

# rm /path/to/directory/*.*

しかし、それは拡張子を持たないファイルでは機能しません。..

Linuxは拡張機能を使用しません。 名前に拡張子を付けるかどうかは、ファイルの作成者が決定します。 Linuxは最初の数バイトを見て、どのような種類のファイルを扱っているのかを把握します。

  • すべて削除するには 非隠しファイル*ディレクトリ内での使用:

    rm /path/to/directory/*

    ただし、このモードではファイルの削除のみが許可されているため、各サブディレクトリにエラーが表示されます。

  • ディレクトリ内のすべての非隠しファイルとサブディレクトリを(すべての内容とともに)削除するには、以下を使用します:

    rm -r /path/to/directory/*

*隠しファイルとディレクトリは、名前がで始まるものです . (ドット)文字、例えば: .hidden-file または .hidden-directory/. Bashでは、次のことに注意してください。 dotglob オプション (デフォルトではオフです)が設定されています, rm 彼らはときに含まれますので、あまりにも隠しファイルに作用します * ファイル名引数のリストを提供するためにシェルによって展開されます。

  • すべての内容を含むフォルダ(すべての内部フォルダを含む)を削除するには:

    rm -rf /path/to/directory
  • すべてを削除するには フォルダの内容 (すべての内部フォルダを含む)が、フォルダ自体ではありません:

    rm -rf /path/to/directory/*

    または、隠しファイル/ディレクトリも削除されていることを確認したい場合:

    rm -rf /path/to/directory/{*,.*}
  • フォルダ内からすべての"ファイル"を削除するには(ない 内部フォルダの削除):

    rm -f /path/to/directory/{*,.*}

警告:パスにスペースがある場合は、常に引用符を使用してください。

rm -rf /path/to the/directory/*

は、2つの独立した rm -rf コール:

rm -rf /path/torm -rf the/directory/*

この問題を回避するには、次を使用します '一重引用符'(シェル変数であっても、すべての展開を防止します)または "二重引用符"(シェル変数の展開は許可しますが、他の展開は禁止します):

rm -rf "/path/to the/directory/"*

どこで:

  • rm -の略 削除
  • -f -の略 これは、たとえば、アーカイブを削除するかどうかを尋ねられたり尋ねられたりしたくないときに役立ちます。
  • -r -の略 再帰的 つまり、すべてのフォルダを再帰的に下に移動し、すべてを削除する必要があります。

ディレクトリ内のすべてのファイル(隠しファイルとサブディレクトリを含む)を削除するには、次を実行します:

rm -rf /path/to/directory/{*,.*}

すべてのファイルとディレクトリを削除するには 隠された ディレクトリ内で、次のことを試すことができます:

  • フォルダを削除してから再作成します

    rm -rf dir_name && mkdir dir_name
  • 使用 find

    find dir_name -mindepth 1 -delete  

ここでは、指定します -mindepth 1 ディレクトリdir_name自体を除外する。
次のリンクを見てみましょう:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

/Path/to/directory内のファイルのみを削除する場合は、次のようにします

find /path/to/directory -type f -print0| xargs -0 rm 

または

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

あなたは負荷を行うことができます find、利点は、あなたがそれを配管せずに見つかったものを一覧表示することができます rm だから、あなたが開始する前に削除されるかを見ることができます。

また、すべてのサブディレクトリとディレクトリ自体を削除する場合は、次のように使用できます rm -rf /path/to/directory. しかし、returnを押す前に常に行を再確認してください, rm -rf たとえば、スーパーユーザーの権限を持っているときに最初のスラッシュの後に誤ってスペースを挿入した場合などです。..

私がこれを自分で検索すると、この質問は常にGoogleの一番上にあるので:

他の答えはさまざまな問題に苦しんでいます:

  1. それらのいくつかは次のとおりです ... それは騒々しく、混乱し、迷惑です。

  2. それらの中には隠しファイル(ドットで始まるファイル)を忘れているものもあります。

  3. ディレクトリの削除を許可するために、正しい(最も深い最初の)順序で削除されません。

  4. それらは他の(マウントされた)ファイルシステムに降りますが、これはしばしば望ましくありません。

  5. 彼らは余分なパラメータ(以下の詳細)で適切に拡張することは困難です。

したがって、ディレクトリ内のすべてのファイルとフォルダを再帰的に削除するには、次のようにします:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

私が追加したことに注意してください -xdev マウントへの降順を防ぐための引数(以下のような /proc など。).

なぜそうではないのか -depth または -delete?

人々は常にこのために私をdownvotingにもかかわらず、これらの方法は欠点を持っています:彼らは許可するのに十分な拡張性があるようには思えません -pruneサブディレクトリを作成します(より多くの問題を導入せずに)。 この方法とは対照的に、次のように挿入することができます

-not \( -path "${DIR}/subdir" -prune \)

の前に -mindepth 除外する引数 subdir その内容を削除したことから。

することができます cd ディレクトリに移動し、コマンドを実行します rm *.* あなたが覚えていればDOSのように。

現在のディレクトリを削除するには、次のようにします rm -d ./*

-dはディレクトリも削除するように指示します。

これは、警告やディレクトリ自体を削除するだけでなく、隠しファイルを削除することができますhttps://stackoverflow.com/questions/43832107/delete-contents-but-not-directory-in-linux

私は本当の答えを追加するのに十分な評判がありませんが、bashでshopt-s dotglob&&rm/path/to/directory/*'ソリューションを使用すると、'(shopt-s dotglob&&rm/path/to/directory/*)'(括弧付き)はshopt-s dotglob`がこ (括弧は、サブシェルに含まれるコマンドを実行します。)