I came across this older article from 2020 and I found it informative. It's about how the shell does globbing and the potential issues it can cause if not understood correctly.

TLDR:

find . -not -name *.py -delete and find . -not -name '*.py' -delete will behave differently in certain scenarios.

In the first example, the shell will replace the wildcard pattern with a list of matching file names IF there are any matches in the current directory. If there isn't, then it won't do anything and will pass *.py to find.

In the second example, the shell won't do any globbing at all and will just pass *.py

you are viewing a single comment's thread
view the rest of the comments
[–] 22 points 4 months ago (4 children)

Basic habit to get into:

If you're contemplating doing something destructive, do a dry-run first.

In this case, remove the -delete flag, run the command and see what you get.

A good approach is to build a command step by step and test your assumptions each iteration.

Things might take a few moments longer, but one day it's going to save your bacon.

As for unexpected globbing, learn the difference between quoted and unquoted, and single versus double quotes.

Source: Linux user for 25+ years

  • source
  • hideshow 4 child comments
  • [–] [S] 4 points 4 months ago (2 children)

    What's the difference between single vs double quotes?

  • source
  • parent
  • hideshow 2 child comments