Ich benutze schon sehr lange gnome und habe den nautilus lieb gewonnen.
Seit etlichen Jahren erweitere ich die Funktionalität ab- und zu um eigene Scripte.
Hier werde ich die meisten von ihnen vorstellen.
Damit das Ganze funktioniert, muß das Script in das Verzeichnis ~/.local/share/nautilus/scripts/ gelegt werden und muss ausführbar sein.
Weitere Informationen gibt die Option "Scriptordner öffnen".
Wie ich gerade ausprobiert habe, funktionieren die Scripte auch mit caja,
dem Filemanager von Mate
Die Scripte kommen in~/.config/caja/scripts/
Wahrscheinlich ist es mit Nemo auch kein Problem.
Oder einfach cp .local/share/nautilus/scripts/* ./.config/caja/scripts/
Alle ausführbaren Dateien in diesem Ordner erscheinen im Skriptmenü. Das aus diesem Menü gewählte Skript wird ausgeführt.
Die Darstellung der Scriptnamen wird angepasst, so werden u.a. Unterstriche einfach unterdrückt.
Beim Ausführen aus einem lokalen Ordner, werden dem Skript die Namen der gewählten Dateien übergeben. Wird es in einem entfernten Ordner (z.B. einem mit Web- oder FTP-Ordner) ausgeführt, werden keinerlei Parameter übergeben.
In jedem Fall setzt Nautilus folgende Umgebungsvariablen, die in jedem Skript verwendet werden können:
NAUTILUS_SCRIPT_SELECTED_FILE_PATHS:
Pfade der gewählten Dateien, durch Newline getrennt (nur im lokalen Fall)NAUTILUS_SCRIPT_SELECTED_URIS:
URIs der ausgewählten Dateien, durch Newline getrenntNAUTILUS_SCRIPT_CURRENT_URI:
URI des aktuellen OrtesNAUTILUS_SCRIPT_WINDOW_GEOMETRY:
Position und Größe des aktuellen FenstersDer erfahrene Bash Script Entwickler weiß ja, wie man in solchen Fällen debuggt, nicht wahr?
Also ich mache das immer mit echo Irgendwas Umleitung in eine Datei in /tmp.
Das erspart viel probieren und hellt im Fehlerfalle auf Achja, damit das Script von nautilus erkannt wird, reicht ein einfaches killall nautilus.
Das Skript zeigt die Auflösung des gewählten Bildes und fragt nach der Anzeige der Bildauflösung, ob das Bild verkleinert und ein Thumbnail erstellt werden soll. Wenn der Benutzer zustimmt, wird die Funktion resize_image direkt im Helper-Skript ausgeführt.
Wenn du lieber das resize_images.sh-Skript aufrufen möchtest, kannst du die Zeile resize_image "$file" durch den entsprechenden Aufruf ersetzen, z.B.
./resize_images.sh "$file"
.
Hier das Script
show_resolution.sh
#!/bin/bash
# Titel: show_image_resolution.sh
# Autor: bed
# Web: zockertown.de
# $Revision: 1.2 $
# Das Skript zeigt die Auflösung des gewählten Bildes und
# fragt nach der Anzeige der Bildauflösung,
# ob das Bild verkleinert und ein Thumbnail erstellt werden soll.
# Wenn der Benutzer zustimmt, wird die Funktion resize_image direkt im Helper-Skript ausgeführt.
# Wenn du lieber das resize_images.sh-Skript aufrufen möchtest,
# kannst du die Zeile resize_image "$file" durch den entsprechenden Aufruf ersetzen, z.B.
# `./resize_images.sh "$file"`.
# Voraussetzung: Benötigt wird Imagemagick (für das Tool `identify`) und `zenity`.
# Prüfen, ob zenity installiert ist
if ! [ -x "$(command -v zenity)" ]; then
echo "Zenity ist nicht installiert. Bitte installiere Zenity."
exit 1
fi
# Prüfen, ob ImageMagick installiert ist
if ! [ -x "$(command -v identify)" ]; then
echo "ImageMagick ist nicht installiert. Bitte installiere ImageMagick."
exit 1
fi
# Funktion zum Verkleinern und Erstellen eines Thumbnails
resize_image() {
local input_file="$1"
local base_name=$(basename "$input_file")
local dir_name=$(dirname "$input_file")
local output_file_1280="${dir_name}/${base_name%.*}_1280x.${base_name##*.}"
local output_thumbnail="${dir_name}/${base_name%.*}_thumbnail.${base_name##*.}"
local original_info=$(identify -format "%w %h" "$input_file")
local original_width=$(echo "$original_info" | awk '{print $1}')
local original_height=$(echo "$original_info" | awk '{print $2}')
echo "Originalgröße: ${original_width}x${original_height}"
if [ "$original_width" -gt 1280 ]; then
convert "$input_file" -auto-orient -resize 1280x1024\> -strip -define jpeg:extent=256kb "$output_file_1280"
echo "Großes Bild generiert: $output_file_1280"
else
echo "Das Bild ist kleiner oder gleich 1280px in der Breite, kein großes Bild erforderlich."
fi
convert "$input_file" -auto-orient -resize 150x150\> -gravity center -background transparent -extent 150x150 -strip "$output_thumbnail"
echo "Thumbnail generiert: $output_thumbnail"
}
# Verarbeiten der ausgewählten Dateien in Nautilus
for file in $NAUTILUS_SCRIPT_SELECTED_URIS; do
file=$(echo "$file" | sed 's|^file://||;s/%20/ /g')
if [ -f "$file" ]; then
resolution=$(identify -format "%wx%h" "$file")
zenity --info --title="Bildauflösung" --text="Die Auflösung von $(basename "$file") ist $resolution."
# Nachfragen, ob das Bild verkleinert und ein Thumbnail erstellt werden soll
if zenity --question --title="Bild bearbeiten" --text="Möchtest du das Bild verkleinern und ein Thumbnail erstellen?"; then
resize_image "$file"
zenity --info --title="Erfolg" --text="Bild wurde verkleinert und Thumbnail wurde erstellt."
fi
else
zenity --error --title="Fehler" --text="Die Datei $file existiert nicht oder ist kein Bild."
fi
done
resize_auto_orient-max-256kb.sh
Zweck: skaliert die Bilder auf 1280x1024, wenn im Quellbild die
Orientierungshinweise intakt sind, wird das Bild korrekt gedreht.
Es wird das Bild so komprimiert, dass es den eingestellten Wert (hier 256KB) nicht überschreitet.
Dies ist für Foren nützlich, wenn die nur eine begrenzte File_size erlauben.
Das skalierte Bild wird mit einer Textnotiz versehen, wenn in
der Schleife der mogrify disabled wird (durch einfügen des '#')
wird das Branding nicht durchgeführt.
#!/bin/bash
#
# Titel: resize_auto_orient-max-256kb.sh
# Autor: Bed [@] zockertown.de
# Web: zockertown.de/s9y/
# Version 0.4
# $Revision: 1.3 $
# Voraussetzung: Benötigt wird Imagemagick für das Consolentool convert
# und mogrify
# Zweck: skaliert die Bilder auf 1280x1024, wenn im Quellbild die
# Orientierungshinweise intakt sind,
# wird das Bild korrekt gedreht.
# Es wird das Bild so komprimierrt, dass es den eingestellten Wert (hier 256KB) nicht überschreitet
# Dies ist für Foren nützlich, wenn die nur eine begrenzte File_size erlauben
# Das skalierte Bild wird mit einer Textnotiz versehen, wenn in
# der Schleife der mogrify disabled wird (durch einfügen des '#')
# wird das Branding nicht durchgeführt.
GD=""
if [ -e /usr/bin/zenity ]
then
GD=/usr/bin/zenity
else
if [ -e /usr/bin/yad ]
then
GD=/usr/bin/yad
fi
fi
if [ -z "$GD" ]
then
echo "weder yad noch zenity sind installiert"
echo "Bitte eins davon nachinstallieren."
echo "zenity ist bevorzugt, hat aber mehr Abhängigkeiten."
exit 1
fi
count=$(/bin/echo $NAUTILUS_SCRIPT_SELECTED_URIS|wc -w)
teil=$[100 / $count ]
teiler=$teil
( for file in $NAUTILUS_SCRIPT_SELECTED_URIS; do
file_name=$(echo $file | sed -e 's/file:\/\///g' -e 's/\%20/\ /g' -e 's/.*\///g')
file_folder=$(echo $file | sed -e 's/file:\/\///g' -e 's/\%20/\ /g' -e "s/$file_name//g")
convert -auto-orient -strip -define jpeg:extent=256kb -geometry 1280x1024 "$file_folder/$file_name" "${file_folder}/${file_name}_max_256kb_1280x1024.jpg"
teiler=$[$teiler + $teil]
echo $teiler
mogrify -pointsize 10 -fill gray -gravity SouthWest -draw "text 10,20 'Copyright Bed'" "${file_folder}/${file_name}_max_256kb_1280x1024.jpg"
done ) | ($GD --progress --percentage=$teil --auto-close)
resize_auto_orient.sh
Hier gilt dasselbe wie bei resize_auto_orient-max-256kb
mit dem Unterschied, dass die Vorgabe der maximalen Dateigröße fehlt, damit leidet dann auch nicht die Qualität.
#!/bin/bash
#
# Titel: resize_auto_orient.sh
# Autor: Bed [@] zockertown.de
# Web: zockertown.de/s9y/
# Version 0.4
# $Revision: 1.4 $
# Voraussetzung: Benötigt wird Imagemagick für das Consolentool convert
# und mogrify
# Zweck: skaliert die Bilder auf 1280x1024, wenn im Quellbild die
# Orientierungshinweise intakt sind,
# wird das Bild korrekt gedreht.
# Das skalierte Bild wird mit einer Textnotiz versehen, wenn in
# der Schleife der mogrify disabled wird (durch einfügen des '#')
# wird das Branding nicht durchgeführt.
# Die Zeilen mit exiftool und rm sind optional und übernehmen die EXIF Werte vom Original.
GD=""
if [ -e /usr/bin/zenity ]
then
GD=/usr/bin/zenity
else
if [ -e /usr/bin/yad ]
then
GD=/usr/bin/yad
fi
fi
if [ -z "$GD" ]
then
echo "weder yad noch zenity sind installiert"
echo "Bitte eins davon nachinstallieren."
echo "zenity ist bevorzugt, hat aber mehr Abhängigkeiten."
exit 1
fi
count=$(/bin/echo $NAUTILUS_SCRIPT_SELECTED_URIS|wc -w)
teil=$[100 / $count ]
teiler=$teil
( for file in $NAUTILUS_SCRIPT_SELECTED_URIS; do
file_name=$(echo $file | sed -e 's/file:\/\///g' -e 's/\%20/\ /g' -e 's/.*\///g')
file_folder=$(echo $file | sed -e 's/file:\/\///g' -e 's/\%20/\ /g' -e "s/$file_name//g")
convert -auto-orient -strip -geometry 1280x1024 -quality 80 "$file_folder/$file_name" "${file_folder}/${file_name}_resized_1280x1024.jpg"
# exiftool -tagsFromFile "$file_folder/$file_name" "${file_folder}/${file_name}_max_1024kb.jpg"
# rm "${file_folder}/${file_name}_max_1024kb.jpg_original"
teiler=$[$teiler + $teil]
echo $teiler
mogrify -pointsize 10 -fill gray -gravity SouthWest -draw "text 10,20 'Copyright Bed'" "${file_folder}/${file_name}_resized_1280x1024.jpg"
done ) | ($GD --progress --percentage=$teil --auto-close)
Der Name ist Programm.
Reduziert die Auflösung und kippt das Bild leicht mit Schatten, macht einen guten Job.
resize_auto_orient-Polaroid.sh
#!/bin/bash
#
# Titel: resize_auto_orient-Polaroid.sh
# Autor: Bed [@] zockertown.de
# Web: zockertown.de/s9y/
# Version 0.1
# $Revision: 1.3 $
# Voraussetzung: Benötigt wird Imagemagick für das Consolentool convert
# und mogrify
# Zweck: skaliert die Bilder auf 1280x1024, wenn im Quellbild die
# Orientierungshinweise intakt sind,
# wird das Bild korrekt gedreht. Ausserdem wird das Bild leicht gekippt, gerollt und mit Rahmen versehen.
# Das skalierte Bild wird mit einer Textnotiz versehen, wenn in
# der Schleife der mogrify disabled wird (durch einfügen des '#')
# wird das Branding nicht durchgeführt.
# Ausgabe ist immer png, weil sonst der transparente Hintergrund verloren gehen würde.
#
GD=""
if [ -e /usr/bin/zenity ]
then
GD=/usr/bin/zenity
else
if [ -e /usr/bin/yad ]
then
GD=/usr/bin/yad
fi
fi
if [ -z "$GD" ]
then
echo "weder yad noch zenity sind installiert"
echo "Bitte eins davon nachinstallieren."
echo "zenity ist bevorzugt, hat aber mehr Abhängigkeiten."
exit 1
fi
count=$(/bin/echo $NAUTILUS_SCRIPT_SELECTED_URIS|wc -w)
teil=$[100 / $count ]
teiler=$teil
( for file in $NAUTILUS_SCRIPT_SELECTED_URIS; do
file_name=$(echo $file | sed -e 's/file:\/\///g' -e 's/\%20/\ /g' -e 's/.*\///g')
file_folder=$(echo $file | sed -e 's/file:\/\///g' -e 's/\%20/\ /g' -e "s/$file_name//g")
convert -auto-orient -strip -geometry 1280x1024 -bordercolor white -background black +polaroid -quality 80 "$file_folder/$file_name" "${file_folder}/${file_name}_resized_1280x1024-polaroid.png"
teiler=$[$teiler + $teil]
echo $teiler
mogrify -pointsize 10 -fill gray -gravity SouthWest -draw "text 10,20 'Copyright Bed'" -caption 'Copyright Bernd Dau' "${file_folder}/${file_name}_resized_1280x1024-polaroid.png"
echo $teiler
teiler=$[$teiler + $teil]
done ) | ($GD --progress --percentage=$teil --auto-close)
.
Das Script ist eigentlich ein Nautilus Helper Script.
Funktioniert aber auch von der Commandline gestartet ordentlich,
wenn auch noch nicht alles getestet
cvs_actions.sh
#!/bin/bash
# Das Script ist eigentlich ein Nautilus Helper Script.
# $Revision: 1.5 $
# Funktioniert aber auch von der Commandline gestartet ordentlich,
# wenn auch noch nicht alles getestet
# Funktion zur Auswahl von Dateien, wenn nicht über Nautilus ausgeführt
select_files() {
FILES=$(zenity --file-selection --multiple --title="Wähle Dateien aus")
echo "$FILES"
}
# Überprüfen, ob das Skript über Nautilus gestartet wurde
if [ -z "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
NAUTILUS_SCRIPT_SELECTED_FILE_PATHS=$(select_files)
fi
# Überprüfen, ob Dateien ausgewählt wurden
if [ -z "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
zenity --error --text="Keine Dateien ausgewählt!"
exit 1
fi
# CVSROOT setzen
export CVSROOT=:extssh:142.132.249.241:/var/CVS
# Funktion zum Hinzufügen von Dateien zu CVS
cvs_add() {
zenity --info --text="Füge Dateien zu CVS hinzu: $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
IFS='|' read -r -a files <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
for file in "${files[@]}"; do
dir=$(dirname "$file")
base=$(basename "$file")
cd "$dir" || { zenity --error --text="Fehler: Verzeichnis $dir nicht gefunden"; return 1; }
# Überprüfen, ob die Datei bereits hinzugefügt wurde
if cvs status "$base" | grep -q "Status:"; then
zenity --info --text="Die Datei $base ist bereits hinzugefügt."
else
cvs add -m "Hinzufügen von $base" "$base"
fi
cd - > /dev/null
done
}
# Funktion zum Einchecken von Dateien in CVS
cvs_ci() {
MESSAGE=$(zenity --text-info --title="Commit-Nachricht eingeben" --width=800 --height=400 --editable)
if [ -n "$MESSAGE" ]; then
IFS='|' read -r -a files <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
for file in "${files[@]}"; do
dir=$(dirname "$file")
base=$(basename "$file")
cd "$dir"
cvs commit -m "$MESSAGE" "$base"
cd - > /dev/null
done
fi
}
# Funktion zum Anzeigen des CVS-Logs
cvs_log() {
IFS='|' read -r -a files <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
for file in "${files[@]}"; do
dir=$(dirname "$file")
base=$(basename "$file")
cd "$dir"
LOG=$(cvs log "$base")
if [ -n "$LOG" ]; then
echo "$LOG" | zenity --text-info --title="CVS Log" --width=800 --height=600
else
zenity --info --text="Keine Log-Einträge für $base"
fi
cd - > /dev/null
done
}
# Funktion zum Anzeigen von CVS-Diffs
cvs_diff() {
IFS='|' read -r -a files <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
for file in "${files[@]}"; do
dir=$(dirname "$file")
base=$(basename "$file")
cd "$dir"
DIFF=$(cvs diff "$base")
if [ -n "$DIFF" ]; then
echo "$DIFF" | zenity --text-info --title="CVS Diff" --width=800 --height=600
else
zenity --info --text="Keine Unterschiede für $base"
fi
cd - > /dev/null
done
}
# Funktion zum Anzeigen des CVS-Status
cvs_status() {
IFS='|' read -r -a files <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
for file in "${files[@]}"; do
dir=$(dirname "$file")
base=$(basename "$file")
cd "$dir"
STATUS=$(cvs status "$base")
if [ -n "$STATUS" ]; then
echo "$STATUS" | zenity --text-info --title="CVS Status für $base" --width=800 --height=600
else
zenity --info --text="Kein Status für $base"
fi
cd - > /dev/null
done
}
# Auswahlmenü
ACTION=$(zenity --list --title="CVS Aktionen" --column="Aktion" \
--height=400 \
--width=300 \
"add" "ci" "log" "diff" "status")
case $ACTION in
add)
cvs_add
;;
ci)
cvs_ci
;;
log)
cvs_log
;;
diff)
cvs_diff
;;
status)
cvs_status
;;
*)
zenity --error --text="Ungültige Auswahl"
;;
esac