I have to delete with permission the files with size 0 created by a user from a certain path. The user and the path are positional parameters. i thought of making a “for” where i go through the files from a certain user and then with “find” to remove the ones empty from the wanted path. Something like this:
#!/bin/bash for file in /$1/* do find /$2 -size -0b -type 'f' -exec rm -i {} ; done
But it’s not working, can you tell me why?
Advertisement
Answer
(recommend editing the posting where the script is complete and presented as code; eg the leading # is missing; note: invert the script and click the {} button)
As shown, the script seems somewhat odd; recommend checking stuff like whether the cmd-line arg-count is correct and then whether args $1
and $2
are valid; the expression /$1/*
indicates you want to repeat the same search based on the wildcard *
result of everything within the absolute path /$1
, but the trailing /*
is not needed (find
will normally descend into subdirs), meanwhile the directory passed to find
is the invariant abs path /$2
. Here’s a revision with some elements guessed:
#!/bin/bash [ $# -ne 2 ] && { echo Usage: ${0##*/} dir user 1>&2; exit 1; } # search the unmodified dir $1 for any file owned by $2 with size 0 and run an interactive delete find $1 -user $2 -type f -size 0 -exec rm -i {} ;