diff --git a/.local/bin/trash-restore b/.local/bin/trash-restore index d44dacab5..bf5bef385 100755 --- a/.local/bin/trash-restore +++ b/.local/bin/trash-restore @@ -1,4 +1,5 @@ #!/bin/sh + set -e getfsroot() { printf "%s" "$(df "$1" --output=target | tail -1)" @@ -6,26 +7,34 @@ getfsroot() { list() { # 1st arg is trash files directory # 2nd arg is directory to match trash files for - [ ! "$(ls -A "$1")" ] && exit 1 + [ ! "$(command ls -A "$1")" ] && exit 1 for file in "$1"/*; do [ "$(head -1 "$file")" = "[Trash Info]" ] && - fpath=$(grep Path "$file" | cut -d '=' -f2) && - echo "$fpath" | grep -qP "^$2/[^/]+$" && - printf "%s %s %s\n" \ + filepath=$(grep Path "$file" | cut -d '=' -f2) && + echo "$filepath" | grep -qP "^$2/[^/]+$" && + printf "%s %s %s\n" \ "$(basename "$file")" \ - "$fpath" \ + "$filepath" \ "$(date -d "$(grep Date "$file" | cut -d '=' -f2)" +'%x %X')" done } -[ -n "$1" ] && dir="$(realpath "$1")" || dir="$(getfsroot "$PWD")" +if [ -n "$1" ]; then + dir="$(realpath "$1")" +else + dir="$(realpath "$PWD")" +fi + fsroot="$(getfsroot "$dir")" -[ "$fsroot" = "$(getfsroot "${XDG_DATA_HOME:-$HOME/.local/share}")" ] && - basedir="${XDG_DATA_HOME:-$HOME/.local/share}/Trash" || + +if [ "$fsroot" = "$(getfsroot "${XDG_DATA_HOME:-$HOME/.local/share}")" ]; then + basedir="${XDG_DATA_HOME:-$HOME/.local/share}/Trash" +else basedir="${fsroot}/.Trash" +fi sel="$(list "$basedir/info" "$dir" | fzf)" -file="$basedir/files/$(echo "$sel" | cut -d ' ' -f1)" -dest="$(echo "$sel" | cut -d ' ' -f2)" +file="$basedir/files/$(echo "$sel" | cut -d '' -f1)" +dest="$(echo "$sel" | cut -d '' -f3)" command mv -ib "$file" "$dest" -command rm "$basedir/info/$(echo "$sel" | cut -d ' ' -f1)" +command rm "$basedir/info/$(echo "$sel" | cut -d '' -f1)"