Mülleimer im Terminal finder-mässig benutzen

Freitag, 23 April 2010
0.0/5 Bewertung (0 Stimmen)
Beschreibung

Ich hatte ein paar bash-Funktionen geschrieben, um mit dem Mülleimer so zusammen zu arbeiten, wie man es Finder her kennt. Das ist allerdings etwas komplizierter, als es sich im ersten Moment anhört. Das liegt daran, dass der Mülleimer nicht nur irgendein Ordner sonstwo ist. Jedes Laufwerk hat seinen eigenen Müllordner. Und der Benutzerordner hat dann den Mülleimer. Der Finder benutzt den Mülleimer in Ihrem Benutzerordner für jeglichen Müll auf Ihrem Startlaufwerk - es sei denn, Sie haben FileVault eingeschaltet.
Die folgenden Code-Zeilen müssen zunächst in die .bashrc oder .profiles eingefügt werden. Auf mactrash Sourceforge-Seite finden Sie ggf aktuellere Versionen des Codes.


#!/bin/bash -c ”echo This file is meant to be sourced.”
alias rm=”del”
# make rm(1) safe.
# Remove or comment-out this line to return to normal rm(1) functionality.
function del ()
{
if declare -F trash >/dev/null
then
trash ”$@”
else
command rm -i ”$@”
fi
}
function trash ()
{
local F
local HOME_DEVICE=”$(stat -f %Sd ”$HOME”)”
local TRASHCAN=~/.Trash
# Set this in advance _outside_ the loop below
for F in ”$@”
do
if ! test -e ”$F”
then
echo ”No such file or directory: $F” 1>&2
return 4
fi

local DEVICE=”$(stat -f %Sd ”$F”)”

if [ x”$DEVICE” == x”” ] || [ x”$DEVICE” == x”???” ]
then
echo ”Can”t locate trash for ${F}.” 1>&2
return 3
fi

if [ x”$DEVICE” != x”$HOME_DEVICE” ]
then
TRASHCAN=”$(trashOnDevice ”$DEVICE”)”
fi

if [ ! -d ”${TRASHCAN}” ]
then
command rm -f ”${TRASHCAN}”
if ! mkdir -m 700 ”${TRASHCAN}”
then
echo ”$TRASHCAN is inaccessible at this time.” | sed ”s;””$HOME””;~;g” 1>&2
return 1
fi
fi

local FinT=”$(basename ”$F”)”

if [ -e ”${TRASHCAN}/${FinT}” ]
then
FinT=”$(date) ${FinT}”
fi

if ! mv -vn ”$F” ”${TRASHCAN}/${FinT}”
then
echo ”Unable to move $F to the trash.” 1>&2
return 2
fi
done

local TRASHSIZE=”$(du -hs ”${TRASHCAN}” 2>/dev/null | cut -f 1)”
local TRASHCANloc=”$(dirname ”$TRASHCAN” | sed ”s;^/Volumes/(.*)/.Trashes;1;g” | sed ”s;””$HOME””;~;g” | sed ”s;^/.Trashes;/;g”)”
echo ”${TRASHSIZE:- 0B} in trash on $TRASHCANloc.”
}
function emptytrash ()
{
local TMPIFS=”$IFS”
IFS=”

local MOUNTS=( $(mount | sed -n ”s:/dev/.* on (.*) (.*):1:p”) )
local TRASHCANs=( ”${HOME}/.Trash” $(IFS=”$TMPIFS”;for i in `seq 0 $(( ${#MOUNTS[@]} - 1 ))`; do echo ”${MOUNTS[$i]}/.Trashes/$(id -u)”; done) )
IFS=”$TMPIFS”
unset TMPIFS
local TRASH_SIZE
TRASH_SIZE=”$( (for i in ”${TRASHCANs[@]}”; do ls ”$i”/; done) 2>/dev/null | wc -w)”
if [ ”$TRASH_SIZE” -gt 0 ]
then
echo -n ”Emptying trash”
for i in ”${TRASHCANs[@]}”
do
tput smcup
pushd ”$i” 2>/dev/null && {
srm -frsvz . 2>/dev/null ; popd ;
}
tput rmcup
echo -n .
done
local DONE=
[ `ls ”${HOME}/.Trash” | wc -w` == 0 ] && DONE=”Done.”
echo ”$DONE”
else
echo ”Trash is empty.”
fi
}
function trashOnDevice ()
{
local DEVICE=”$1”
local MOUNT=”$(mount | sed -n ”s:/dev/””$DEVICE”” on (.*) (.*):1:p”)”

if [ x”$MOUNT” == x”” ] || [ x”$MOUNT” == x”???” ]
then
# If no mount point is found, then don”t return the path to root!
return 1
elif [ x”$MOUNT” == x”/” ]
then
# Encourage the resulting path to _not_ start with two slashes
MOUNT=””
fi

echo ”$MOUNT/.Trashes/$UID”
}
# Usage : seq n m
# echo all integers between n and m using a skip or increment of i
function seq ()
{
[ ”$1” ] || [ ”$2” ] || return 1

local x=$1;
local y=$2;
local i=${3:-1};
local seperator=”${4:- }”
while [ $x -le $y ]
do
echo -n $x”${seperator}”;
x=$(( $x + $i ));
done
echo
}



Wenn Sie dann den Code der ~/.bashrc hinzu gefügt haben, werden Sie feststellen, dass das Terminal jetzt drei neue Befehle versteht: del, trash und emptytrash.
del: ist nur ein anderer Name für trash.
trash: Wenn Sie auf dem Desktop eine Datei haben, die Sie löschen wollen, tippen Sie im Terminal trash ~/Desktop/datei_für_den_Muell.doc
emptytrash: emptytrash im Terminal ist die Entsprechung von Finder mit Papierkorb sicher entleeren. Da das im Terminal viel Zeit in Anspruch nimmt, sollte Sie für das sichere Entleeren besser den Finder benutzen. Irgendwann in näherer Zukunft werde ich den Code überarbeiten, damit das sichere Entleeren im Terminal nicht mehr so viel Zeit in Anspruch nimmt.
Noch einiges am Rande: der Code setzt den Befehl rm ausser Kraft, da er jetzt auf del weist.
Technische Details
Der Mülleimer im Finder ist ein Zusammenschluss mehrerer Ordner und nicht nur einen.
Ihr Benutzerordner hat einen (versteckten) Ordner namens .Trash, der den gesamten Müll ihrer Startlaufwerks sammelt. Wenn Sie jetzt keine zusätzlichen Laufwerke haben, wandert der gesamte Müll vom Finder im Ordner ~/.Trash
Schleissen Sie nun ein weiteres Laufwerk an Ihren Mac an und bewegen eine (überflüssige) Datei in den Finder-Müll. so landet die jetzt nicht mehr in Ihren Benutzerordner-Müll. Die Datei liegt jetzt in Trashes des jeweiligen Laufwerkes. Trotzdem können Sie die Datei im Finder-Müll sehen, der Finder-Mülleimer sammelt ja den gesamten Müll, auch den von zusätzlich angeschlossenen Laufwerken.

Spezifikationen

Hits

3899

© by macjaner.ch | Powered by GoeGG-ArT.ch