Instructions to set up a basic LAMP+SSH server environment
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

94 lines
2.8 KiB

###########################################################
# List files and directories which are not owned by any package in a Debian system
# Scripted by Fincer (~Pekka Helenius), 2017
echo -e "\nSearch for files & folders which are not owned by any installed package.\n"
if [[ $# -eq 0 ]]; then
read -r -p "Folder path: " BASEDIR
#Substitute $ symbol from environmental variables for printenv input
if [[ $BASEDIR == *"$"* ]]; then
BASEDIR=$(echo $(printenv $(echo ${BASEDIR} | sed 's/\$//g')))
fi
else
BASEDIR=$1
fi
if [[ ! $(file --mime-type "${BASEDIR}" | grep "inode/directory" | wc -l) -eq 1 ]]; then
echo "ERROR: Use full folder path as an input value!"
elif [[ $# -gt 1 ]]; then
echo "ERROR: Only one argument accepted!"
else
echo -e "Search depth:\n1 = "${BASEDIR}"\n2 = "${BASEDIR}" & subfolders\n3 = "${BASEDIR}", subfolders & 2 folder levels below\n4 = no limit\n"
read -r -p "Which depth value you prefer? [Default: 1] " response
case $response in
1)
depth="-maxdepth 1 "
depthstr="${BASEDIR}"
;;
2)
depth="-maxdepth 2 "
depthstr="${BASEDIR} and subfolders"
;;
3)
depth="-maxdepth 3 "
depthstr="${BASEDIR}, subfolders and 2 folder levels below"
;;
4)
depth=""
depthstr="${BASEDIR} and all subfolders"
;;
*)
echo -e "\nUsing default value [1]"
depth="-maxdepth 1 "
depthstr="${BASEDIR}"
esac
echo -e "\nSearching unowned files in $depthstr\n"
function counter() {
i=0
n=1
COUNT=$(echo "$DATASET" | wc -l)
IFS=$'\n'
for data in $DATASET; do
echo -ne "Scanning $data_name $n ($(( 100*$n/$COUNT ))%) of all $type ($COUNT) in $depthstr\r"
if [[ $(dpkg -S "${data}" &>/dev/null || echo "no path found matching pattern" | wc -l) -eq 1 ]]; then
DATA_ARRAY[$i]="$(( $i + 1)) - ${data}"
let i++
fi
let n++
done
unset IFS
if [[ $i -gt 0 ]]; then
echo -e "\nThe following $i of $COUNT $type is not owned by any installed package in $depthstr:\n"
IFS=$'\n'
echo -e "${DATA_ARRAY[*]}\n"
unset IFS
unset DATA_ARRAY
else
echo -e "\nAll $type are owned by system packages in $depthstr.\n"
fi
}
function files() {
DATASET=$(find "${BASEDIR}" ${depth} -type f)
type="files"
data_name="file"
counter
}
function folders() {
DATASET=$(find "${BASEDIR}" ${depth} -type d)
type="folders"
data_name="folder"
counter
}
files; folders
fi