so I have the code right now down below, and I’m running into a few problems with it
I’m having trouble excluding the directories being outputted by
find ${1-.}It is giving me the directories too instead of only names; I’ve tried different methods such as -prune etc.
I’m having trouble with deleting the empty files
The data given to me by
EMPTY_FILE=$(find ${1-.} -size 0)
Does not give me the correct path Here is the output for that
TestFolder/TestFile
in this case I can’t just do:
rm TestFolder/TestFile
As it is invalid path; since it needs ./TestFolder/TestFile
How would I add on the ./ or is there away to get the full path.
#!/bin/bash
echo "Here are all the files in the directory specifiedn"
find ${1-.}
EMPTY_FILE=$(find ${1-.} -size 0)
echo "Here are the list of empty filesn"
echo "$EMPTY_FILE n"
echo "Do you want to delete those empty files?(yes/no)"
read text
if [ "$text" == "yes" ]; then $(rm -- $EMPTY_FILE); fi
Any help is appreciated!
Advertisement
Answer
You want this:
#!/bin/bash
echo -e "Here are all the files in the directory specifiedn"
# Use -printf "%fn" to print the filename without leading directories
# Use -type f to restrict find to files
find "${1-.}" -type f -printf " %fn"
echo -e "Here are the list of empty filesn"
# Again, use -printf "%fn"
find "${1-.}" -type f -size 0 -printf " %fn"
echo -e "Do you want to delete those empty files?(yes/no)"
read answer
# Delete files using the `-delete` option
[ "$answer" = "yes" ] && find "${1-.}" -type f -size 0 -delete
Also note that I’ve quotes "${1-.}" at all occurrences. Since it is user input, you can’t rely on the input. Even if it is a path, it might still contain problematic characters, like spaces.