I require the script to cd
to a directory, then delete all but a few files in sub-directories—but leave the folders alone. Would it help to use switch
Using find? You can use several parameters, including depth, file age (as in stat), perms etc...
find . -maxdepth 2
How about this?
$ find /Users/YourName/Desktop/Test -type f -maxdepth 2 -not -name watch.log -delete
-type
: look for files only-maxdepth
: go down two levels at most-not -name
(combo): exclude watch.log
from the search-delete
: deletes filesTry out the above command without the -delete
flag first. That will print out a list of files that would have been deleted.
Once you’re happy with the list, add -delete
back to the command.
You should use find
:
for i in $(find . -type d)
do
do_stuff "$i"
done
If you really have a lot of directories, you can pipe the output of find into a while read
loop, but it makes coding harder as the loop is in another process.
About spaces, be sure to quote the variable containing the directory name. That should allow you to handle directories with spaces in their names fine.