ディレクトリを削除せずにすべてのファイルを再帰的に削除します


10

サブディレクトリ内のすべてのファイルを含むディレクトリのすべてのファイルを「整理」したいが、サブディレクトリはそのままにしたい。私の理解でrm -rは、サブディレクトリ自体も削除されます。

私はしていない隠れた(ドット)ファイルを削除します。

これはどのように行うことができますか?


1
find -type f ! -name "[.]*" -delete適切ではない?
コスタ2015年

知りません。それは私が求めていることをしますか?
Scott Wilton

せずに試してください-delete-削除するファイル名を出力するだけです。
コスタス

非表示のディレクトリにあるファイル(非表示かどうか)を削除しますか?
ステファンChazelas

ディレクトリへのシンボリックリンクはどうですか?
ステファンChazelas

回答:


10

findそのために使用します:

find . ! -name '.*' ! -type d -exec rm -- {} +

1
すべてのfindの実装が-delete
そうであるとは限ら

3
@RomeoNinovはOPの質問を読んでください:I do not want to delete hidden (dot) files.
jimmij

1
@Costas、いいえ、エスケープが必要なシェルはあり+ません(少なくともBourne、csh、またはrcファミリでは)。いくつかの古いバージョンのcshエスケープ{}が必要であると言う伝説がありますが、私はそれらに遭遇したことがありません。
ステファンChazelas

1
@ScottWilton隠しディレクトリは含まれますが、隠しディレクトリ内の隠しファイルは含まれません。非表示のディレクトリにあるすべてのファイルを拒否する場合find . ! -name '.*' ! -type d ! -path '*/.*'は、ジョブを実行する必要があります。
jimmij 2015年

1
@jimmy、find . -name '.?*' -prune -o ! -type d -exec rm {} +それらすべてで下降することを避けるのがより好きです。--パスはで始まるため、ここでは不要です(ただし害はありません)./
ステファンChazelas

0

次のようなものを試してください:

find <path> ! -name '.*' -type f -exec rm {} \;

何かをスピードアップするのではなく、一度に1つずつファイルを削除する理由は何.... -exec rm {} + ですか?
Anthon、2015年

一つ一つやってみたいです。大量の(および並列の)操作には(I / Oサブシステムに大きな負荷がかかるため)奇妙な(そして不快な)副次的な影響があります
Romeo Ninov

1
-exec rm {} +並列ではなく、rmいくつかのファイル名で呼び出すだけです。実行されるrm呼び出しが少ないため、リソースに優しいです。安全性が少し低い場合は、削除するファイルのディレクトリコンポーネントをシンボリックリンクに変更できる競合ウィンドウが拡大されます。しかし、それだけに-deleteまたは-execdir rm {} \;完全に対処します。
ステファンChazelas

@StéphaneChazelas、これらのどれでもない(-deleteまたは-execdir)がUNIXに存在します。そして、私はLinuxについて言及されているのか疑問に思っています!
Romeo Ninov、2015年

@RomeoNinov、はい、私はここで別のコメントで言ったの-execは標準的なものだけです。-deleteそして-execdirかかわらず、BSD系から来る、GNUは、約10年後にそれらを追加しました。いずれにせよ、それは単なるカーネルであるLinuxとは何の関係もありません。
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.