そのディレクトリのサブディレクトリを除くディレクトリからすべてのファイルを削除する方法は?

そのディレクトリのサブディレクトリを除くディレクトリからすべてのファイルを削除する方法は?

私はbashシェルを使用しています。特定のディレクトリ内のすべてのJARファイルを削除するコマンドがあります

find ~/.jenkins/jobs/subco/ -name '*.jar' -print0 | xargs -0 -r rm

しかし、「~/.jenkins/jobs/subco/myapp」にあるJARファイルを除くすべてのJARファイルを削除するように上記の内容を修正したいと思います。 JARファイルがその特定のディレクトリから削除されることを除いて、他のすべてのディレクトリから削除されるように上記のコマンドをどのように変更できますか?

答え1

-pruneオプションを使用してディレクトリをスキップします。

find ~/.jenkins/jobs/subco -path ~/.jenkins/jobs/subco/myapp -prune -o -name '*.jar' -exec rm -r {} +

答え2

努力する:

(
  cd ~/.jenkins/jobs/subco
  find . -path ./myapp -prune -o -type f -name '*.jar' -print0 | ...
)

-type fJARファイルのみを一致させたい場合は、制限に追加してください。そして、あなたはそれを使用し、それをサポートする-print0可能性があるので、次のものを使用できます。find-delete

(
  cd ~/.jenkins/jobs/subco
  find . -path ./myapp -prune -o -type f -name '*.jar' -delete
)

POSIX的に:

(
  cd ~/.jenkins/jobs/subco
  find . -path ./myapp -prune -o -type f -name '*.jar' -exec rm -f {} +
)

GNU findを使用すると-execdir使用を避けることができます-exec競争条件、一部もご覧くださいGNU Find マニュアルのセキュリティに関する考慮事項

-delete可能であれば常に使用してください。

関連情報