1
0
Fork 0

fix trash-restore script

This commit is contained in:
Luca Bilke 2023-11-16 14:06:50 +01:00
parent 1fe1faea2a
commit a35af6880b
1 changed files with 20 additions and 11 deletions

View File

@ -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)"