Quicky script, adapt as you see fit:
#!/usr/bin/env bash find /project/ -name '*.pdf' -print0 | while read -d $'\0' i; do if [ ! -e "$" ]; then echo "$ doesn't exist!" fi done exit 0
-d $'\0'
sets the delimiter for read
to nullbyte, while -print0
is the equivalent for find
, so this should be bulletproof against files with spaces and newlines in their names (obviously irrelevant in this case, but useful to know in general). $
replaces the .pdf
at the end of the variable $i
with -project.zip
. Other than that, this is all standard shell scripting stuff.
If you wanted to shorten it even more, you could also use
[ -e "$" ] || echo "$ doesn't exist!"
...instead of the if
statement. I think that if
is easier to work with if you're using more than a single, short line (you can get around this by using a function, but at that point you aren't getting any psace saving vs. using the if
).
Assuming you have bash 4+ (you probably do; you can check with bash --version
), you can use the globstar option instead of find
:
#!/usr/bin/env bash shopt -s globstar for f in /project/**/*.pdf; do if [ ! -e "$" ]; then echo "$ doesn't exist!" fi done exit 0
This has the advantage of being pure bash, so it should be faster (only noticeably so with at least hundreds of files, though).