|
|
- ###########################################################
- # 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
|