正規表現と一致しないファイルを繰り返し削除します。

正規表現と一致しないファイルを繰り返し削除します。

フォルダツリーから一時ファイルの束を消去しようとしていますが、特定の基準に一致するファイル、特に実行可能ファイル、.tplファイルは削除し、サブフォルダ「data」は削除したくありません。

ここでこの質問を見ました。

Mac端末を使用して、正規表現に一致するディレクトリのファイルを削除します。

私が探しているものとほぼ一致しますが、一致させたい正規表現があり、一致したくない正規表現があります。削除されていないすべてのファイルを検索するには:

find . -executable -o -regex '.*\.tpl'

正規表現で-vのように一致を反転させる方法はありますか?

答え1

正規表現で-vのように一致を反転させる方法はありますか?

使用否定的な( !):

find . -executable -o ! -regex '.*\.tpl' -exec rm -i {} \+

答え2

特定の基準に一致するファイルを除くすべての項目に対してコマンドを実行する便利な方法は、「何もしない場合は実行」を意味する段落の動作を-o利用することです。find -cond1 -cond2 -o -exec commandcond1cond2command

find . -type f -executable -o -name '*.tpl' -o -exec rm -i {} \+

ディレクトリを除外するには、「ディレクトリをスキップしてそのディレクトリに戻らない」という意味の操作をdata使用してください。名前付きのすべてのディレクトリを一致させるため、または最上位レベルでのみ一致する-pruneために使用されます。-name datadata-path ./data

find . -type f -executable -o \
       -name '*.tpl' -o \
       -type d -name data -prune -o \
       -exec rm -i {} \+

ボーナス:zshでも同じです。

rm -i -- **/*~*.tpl~data/*(.^*)
  • これ~オペレーター特定のパターンに一致するファイルを除外します(最初にこれを行う必要がありますsetopt extended_glob)。
  • **/実装する再帰ワイルドカード
  • これ. グローバル予選完全一致を通常のファイルに制限し、実行可能^*ファイルを除外します(^次の修飾子を否定します。修飾子はANDです)。

関連情報