ubuntuusers.de

Ordnernamen in nautilus oder bash ausgeben

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Rupert

Avatar von Rupert

Anmeldungsdatum:
18. Oktober 2004

Beiträge: 313

Wohnort: leepzz

Hallo,

gibt es eine funktion den aktuellen ordnernamen ohne den Pfad anzuzeigen iwe pwd es tut?
Ich bastel an einem script für nautilus das diesen verwenden muss.
Innerhalb von Nautilus muss es diese variable geben, da in jedem Fenster in der Titelleiste genau dieser Ordnername steht. Ein suchen in der metacity-theme-1.xml hat mich leider nicht schlauer gemacht.

danke

Stonie

Avatar von Stonie

Anmeldungsdatum:
30. März 2005

Beiträge: Zähle...

Wohnort: Waging

Hallo,

also zum Thema Nautilus-Scripts gibts eine eigene HP:

http://g-scripts.sourceforge.net/index.php

Ein kurzer Blick in dir FAQ verrät einem auch schnell, daß Nautilus eine handvoll Umgebungsvariablen kennt und diese übergeben kann:

NAUTILUS_SCRIPT_SELECTED_FILE_PATHS:
    newline-delimited paths for selected files (only if local)
NAUTILUS_SCRIPT_SELECTED_URIS:
    newline-delimited URIs for selected files
NAUTILUS_SCRIPT_CURRENT_URI:
    current location
NAUTILUS_SCRIPT_WINDOW_GEOMETRY
    position and size of current window


Ob eine davon nur den Namen des aktuellen Ordners enthält weiß ich nicht, aber ich denke den kompletten Pfad zu parsen und den gewünschten String zu extrahieren sollte nicht das Problem sein.

Have a nice day! ☺
Stonie

sxe

Avatar von sxe

Anmeldungsdatum:
2. März 2005

Beiträge: 183

Wohnort: NRW

Habs gerade mal versucht.

Auf der Shell kommt man so an das aktuelle Verzeichnis.

echo ${PWD##*/} 

bye

Rupert

(Themenstarter)
Avatar von Rupert

Anmeldungsdatum:
18. Oktober 2004

Beiträge: 313

Wohnort: leepzz

Nach einigen googeln und modifizieren fremder scripte hab ich nun folgende Lösung:

das script bennent Dateien in einem Verzeichniss nach OrdnernameDateiname z.B.
"UrlaubBild01.png"

pfad=`pwd`
Oname="$(echo $pfad| sed 's/.*\///' | sed 's/\///g')"
ls |while read datei ; do  mv "$datei" "$Oname$datei" ; done

und hier mein fast fertiges script zum automatischen resizen und umbennen.

#!/bin/bash
#
pfad=`pwd`
Oname="$(echo $pfad| sed 's/.*\///' | sed 's/\///g')"
# oder nur Oname="${PWD##*/}"
ls |while read datei ; do /usr/bin/convert -resize 640x480!  "$datei" "$Oname"_"$datei" ; rm $datei; done
exit 0


fehlt nur noch das der Dateiname durch eine Nummerierung ersetzt wird, so das der alte Name in 01,02,03... geändert wird.

PS: sxe, leider hab ich deinen Post zu spät gesehen ☹, funktioniert aber auch genauso und ist etwas kürzer

Rupert

(Themenstarter)
Avatar von Rupert

Anmeldungsdatum:
18. Oktober 2004

Beiträge: 313

Wohnort: leepzz

mittlerweile bin ich soweit das ich die dateien nacheinander durchnumerieren kann,
leider verweigert das script beim 2ten durchlauf seinen Dienst wenn ein Leerzeichen im Verzeichnissnamen und dem entsprechend dann auch im Dateiname ist.
Gibt es ein Workaround für diese Problem?

#!/bin/bash
#
#pfad=`pwd`
#Oname="$(echo $pfad| sed 's/.*\///' | sed 's/\///g')"

Oname="${PWD##*/}"

#ls |while read datei1 ; do /usr/bin/convert -resize 640x480!  "$datei1" _"$datei1" ; rm $datei1;done

i=1;
for file in *.png; 
do
	while [ -f "$Oname"_bild"$(printf "%03d" $i).png"]
	do	
	((i++))
	done
	mv $file "$Oname"_bild"$(printf "%03d" $i).png"
done

danke

sxe

Avatar von sxe

Anmeldungsdatum:
2. März 2005

Beiträge: 183

Wohnort: NRW

Hi

Ich bin mir jetzt nich ganz sicher was du eigenlich machen willst. Aber dieses
Script wandelt alle im aktuellen Verzeichnis liegenden *.png Bilder in Bilder
der Größe 640x480 und nennt sie gleichzeitig noch in die gewünschte Form um.
Wenn du die Ausgangsdatei noch löschen willst dann mußt du das 'rm "file"' noch
auskommentieren. Es spielt keien Rolle ob Leerzeichen im Ordnernamen oder
Dateinamen stehen.

Viel Spaß.. 😛

#!/bin/bash

Oname="${PWD##*/}"

i=1;
for file in *.png;
do
   filename="$Oname""_bild""$(printf "%03d" $i)"".png"
   convert -resize 640x480! "$file" "$filename"
   #rm "$file"
   ((i++))
done 

Beim nochmaligen lesen deiner Beiträge ist mir aufgefallen, dass du warscheinlich nur
die Dateien umbenennen willst. Das macht folgendes Script.

#!/bin/bash

Oname="${PWD##*/}"

i=1;
for file in *.png;
do
   filename="$Oname""_bild""$(printf "%03d" $i)"".png"
   mv "$file" "$filename"
   ((i++))
done 

bye

Rupert

(Themenstarter)
Avatar von Rupert

Anmeldungsdatum:
18. Oktober 2004

Beiträge: 313

Wohnort: leepzz

Die meisten Fehler hatte ich schon ausgebügelt und es lief ganz gut, bis auf eine menge Fehlermeldungen in der BASH aber deins ist um einige kürzer und lesbarer 😉.
Leider besteht die Gefahr das wenn man es 2 mal durchlaufen lässt alle Dateien gelöscht werden!
Folgende änderung verhindert das:

#!/bin/bash

# wechsel in die Unterordner
#WD=$(pwd)
#find -type d | while read dir; do
#cd "$dir"

# resize
Oname="${PWD##*/}"

i=1;
for file in *.png;
do
   filename="$Oname""_shot""$(printf "%03d" $i)"".png"
   mv "$file" tmp_"$file"
   /usr/bin/convert -resize 640x480! tmp_"$file" "$filename"
   rm tmp_"$file" 
   #mv "$file" "$filename"
   ((i++))
done

#cd "$WD"
  
#done
exit 0

und vielen dank für die Hilfe

sxe

Avatar von sxe

Anmeldungsdatum:
2. März 2005

Beiträge: 183

Wohnort: NRW

Hi nochmal..

Ich kann deinen Einwand nicht so ganz verstehen. In den von mir vorgeschlagegen
Lösungen besteht keineswegs die Gefahr alle Dateien zu löschen. Auch nicht wenn
das Skript 10 mal aufgerufen wird. Es wir ja immer die Augangsdatei behandelt
und neue Neue erzeugt.

Das zuletzt von dir gepostete Skript macht eigentlich genau das gleiche wie die
anderen Skripte auch. ☺

Zeile 3: hier wird der zukünftige dateiname festgelegt.
Zeile 4: die Ausgangsdatei wird in "tmp_alterDateiname" umbenannt.
Zeile 5: hier wird die neue Datei erzeugt. Und zwar aus der eben erzeugten tmp Datei.
Zeile 6: Die tmp Datei wird gelöscht

Du kannst dir Schritt 4 sparen da er nichts bewirkt außer das umbenennen der
Ausgangsdatei. Du verhinderst damit nicht das löschen der Ausgangsdatei.

1 for file in *.png;
2 do
3    filename="$Oname""_shot""$(printf "%03d" $i)"".png"
4    mv "$file" tmp_"$file"
5    /usr/bin/convert -resize 640x480! tmp_"$file" "$filename"
6    rm tmp_"$file"
7    #mv "$file" "$filename"
8    ((i++))
9 done
 

Rupert

(Themenstarter)
Avatar von Rupert

Anmeldungsdatum:
18. Oktober 2004

Beiträge: 313

Wohnort: leepzz

mir ist klar das die anderen genau dasselbe machen, die modifikation mit deinem Vorschlag ist wie gesagt am elegantesten.

wenn ich das Ursprungsfile nicht am anfang umbenenne und das script 2x durchlaufen lasse wird $file gelöscht, da beim ersten Durchgang $file in $filename umbenannt wurde ist beim zweiten durchlauf $filename=$file.

Ich habs ein paarmal mit und ohne tmp file probiert und ohne tmpfile ist am ende nichts mehr im folder ☹

mfg

rupi

sxe

Avatar von sxe

Anmeldungsdatum:
2. März 2005

Beiträge: 183

Wohnort: NRW

Also hier ist das nicht so aber wenn du jetzt ne Lösung gefunden
hast viel Spaß damit.

bye

Antworten |