サブディレクトリ全体からワイルドカードを削除する、Mac OS

サブディレクトリ全体からワイルドカードを削除する、Mac OS

コマンドが実行されるディレクトリの下のすべてのサブディレクトリからワイルドカードを削除したいと思います。

ベストアンサー1

find . -name '*.unwanted' ! -type d -delete

名前が一致するファイル*.unwanted(タイプ目次1)現在のディレクトリと下のサブディレクトリ。削除すると、! -type dディレクトリファイルも削除されますが空でない場合にのみ適用されます。

隠しファイルと隠しディレクトリのファイルも削除されます。

-deleteBSD拡張であり(macOSでも動作します)、GNUを含む他のfindいくつかの実装でも見つかりますが、find標準ではありません(サポートされていない-exec rm -f {} +場合findは次に置き換えます)。

macOSのデフォルトのインタラクティブシェルなので、zshシェルプロンプトでも同じことができます。

rm -f -- **/*.unwanted(D^/)   # same as find above, D for dot (hidden) files
rm -f -- **/*.unwanted(^/)    # skip hidden files and dirs
rm -f -- **/*.unwanted(-^/)   # consider the type of file after symlink resolution
rm -f -- ***/*.unwanted(^/)   # follow symlinks when traversing the
                              # directory tree (same as find -L)

ただし、次の問題が発生する可能性があります。パラメータリストが長すぎます。ファイルの数が多いとエラーが発生し、組み込みコマンドを使用またはzargs解決rmできますzmodload zsh/files

find述語とzsh glob修飾子(セクション)の両方を(...)削除したいファイルをさらに具体化できます。いくつかの例:

  • -type f/ (.):一般ファイルのみ(! -type d/置換(^/)
  • -mtime -7/ (m-7):7日以内
  • -size +1000000c/ (L+1000000): 1MB以上です。
  • -exec cmd {} \;/ (e['cmd $REPLY'])、実際のファイルを返しますcmd
  • 詳細については、/ manthe/documentation() を参照してください。infofindzshinfo zsh qualifiers

1段、ディレクトリ型ファイルを指しているかどうかに関係なくシンボリックリンクを削除する。

おすすめ記事