回答:
試してください:
find /var/myfolder -type f -delete
これにより、/ var / myfolderの下にあるすべての通常ファイルが取得され、ディレクトリのみが残されて削除されます。
-type f
!=! -type d
zshでは、.
glob修飾子を使用して、通常のファイルのみを照合します。
rm -- **/*(.)
これにより、現在のディレクトリとそのサブディレクトリ内のすべての(隠されていない)通常のファイルが再帰的に削除されます。D
glob修飾子を追加して、非表示の通常ファイル(および非表示ディレクトリ内の通常ファイル)も削除します。
find . -depth -exec rm {} + 2>/dev/null
rm
ディレクトリを削除しないので、すべてに対して実行するだけです。
ディレクトリへのシンボリックリンクを保持するには:
find . ! -type d -exec sh -c '
for f do [ -d "$f" ] ||
set "$@" "$f"; shift
done; rm "$@"' sh {} +
上記のバージョンでテストする必要のあるファイルが多数ある場合、これはおそらくわずかに最適化された方法でも機能するはずだと思います:
find . ! \( -type l -o -type d \) \
-exec rm {} + -o -exec sh -c '
for f do [ -d "$f" ] ||
unlink "$f";done' sh {} +
find
はそのための-xtype
オプションがあることに注意してください。
# This will delete all directory contents, including hidden files and
# subdirectories, without deleting the directory itself
# With GNU find:
find /path/to/directoryToEmpty -mindepth 1 -delete
# OpenBSD (and probably other BSDs)
find /path/to/directoryToEmpty -mindepth 1 -depth -exec rm -f {} \;
# To see what it deletes, in the order it will delete it:
find /path/to/directoryToEmpty -mindepth 1 -depth -print
また、問題のディレクトリツリーの一番上に移動して、次のコマンドを実行できるはずです。
find . -type f -print0 | xargs -0 rm -rf
ディレクトリツリーをそのままにして、すべてのファイルを削除する必要があります。-print0および-0オプションは、スペースを含むファイルまたはディレクトリ名がないと確信している場合は省略できます。
findコマンドは、ファイル(-type f)とリンク(-type l)を区別するため、リンクがあればそのまま残します。ただし、テストされていません。疑わしい場合は、次を実行します。
見つける。-タイプl
前のfindコマンドを実行する前に何かが表示されるかどうかを確認します。
rm
フラグがどのように-r, -R, --recursive - remove directories and their contents recursively
適合するか説明できますか?