コマンドが実行されるディレクトリの下のすべてのサブディレクトリからワイルドカードを削除したいと思います。
答え1
find . -name '*.unwanted' ! -type d -delete
名前が一致するファイル*.unwanted
(タイプ目次1)現在のディレクトリと下のサブディレクトリ。削除すると、! -type d
ディレクトリファイルも削除されますが空でない場合にのみ適用されます。
隠しファイルと隠しディレクトリのファイルも削除されます。
-delete
BSD拡張であり(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
。- 詳細については、/
man
the/documentation() を参照してください。info
find
zsh
info zsh qualifiers
1段、ディレクトリ型ファイルを指しているかどうかに関係なくシンボリックリンクを削除する。