kanotix.com

Scripte - Automatische Ordner-Erstellung nach Namen von Dateien ?

stalin2000 - 16.07.2008, 02:13 Uhr
Titel: Automatische Ordner-Erstellung nach Namen von Dateien ?
Hallo,

ich habe das Problem, daß ich sehr viele Textdateien habe für die ich jeweils einen eigenen Ordner mit dem selben Namen wie die Datei erstellen möchte.
Anschließend möchte ich, daß jede Textdatei in ihren gleichnamigen Ordner automatisch kopiert wird.

Weiß da jemand eventuell, wie eine Befehlsabfolge für diesen Zweck ungefähr lauten könnte?

Also mit mkdir kann man ja Verzeichnisse erstellen. Da ich auch eine Liste in Text, bzw Tabellenform der Dateinamen habe, müßte ich nur noch die Verknüpfung von meiner Dateiliste und dem Befehl mkdir irgendwie hinbekommen.... Aber wie.. ?

Gruß Christopher
sc - 17.07.2008, 07:59 Uhr
Titel:
stalin2000 hat folgendes geschrieben::
Da ich auch eine Liste in Text, bzw Tabellenform der Dateinamen habe...


Code:

#!/bin/bash

for i in "`cat dateiliste.txt`"
do
        mkdir `basename "$i" .txt`
        cp -a "$i" `basename "$i" .txt`
done


daran könntest Du Dich evt. anlehnen.
Script ist aber ungetestet und enthält keine Sicherheitsabfragen.
Übernehme keine Gewähr für Deine Daten Winken

Ich nehme mal an, dass im Ordnername nicht die Datei-Endung
(hier im Beispiel .txt) enthalten sein braucht. Sonst wirst Du ver-
mutlich die Ordner erst in einem anderen Verzeichnis anlegen müssen,
da sonst der Dateinamen doppelt vorhanden wäre ...
Des Weiteren müsstest `basename "$i" .txt` durch "/Pfad/$i" oder
so ähnlich ersetzten.

Alternativ zur Dateiliste kannst ja auch eine List-Abfrage in der
for-Schleife machen.

Code:
for i in "`ls`"


Ggf. musst noch schaun, dass vorhandene Ornder nicht angezeigt werden

Vielleicht hilfts Dir ja irgendwie weiter ....
stalin2000 - 17.07.2008, 10:38 Uhr
Titel:
Danke!

ich habe jetzt aus folgendem eine .sh Datei gemacht:

Zitat:
#!/bin/bash

for i in "`cat liste.txt`"
do
mkdir `basename "$i" .txt`
cp -a "$i" `basename "$i" .txt`
done


Das Problem ist, daß das Script jetzt für jedes Wort einen Ordner macht. Jede Zeile der liste.txt enthält mehrere Worte.

Kann ich das so modifizieren, daß er automatisch aus jeder Zeile einen Ordner macht?

Gruß Christopher
Kano - 17.07.2008, 11:26 Uhr
Titel:
while read x; do
....
done <<EOT
$(cat liste.txt)
EOT
jgese - 17.07.2008, 13:29 Uhr
Titel:
---
stalin2000 - 17.07.2008, 23:21 Uhr
Titel:
Ja, danke.

Fast funktioniert das Script schon.

Zitat:
mkdir: kann Verzeichnis „U2 - Pride.txt“ nicht anlegen: Die Datei existiert bereits


Müßte man noch das txt beim Verzeichnis wegbekommen, oder jedem Ordner noch ein Zeichen hinzufügen und dann müßte's passen...
jgese - 18.07.2008, 12:28 Uhr
Titel:
---
stalin2000 - 18.07.2008, 12:54 Uhr
Titel:
Hm, aber wie soll denn das Verzeichnis xy.txt angelegt werden, wenn im selben Verzeichnis schon die Datei xy.txt liegt? Das ist doch gar nicht möglich.
blauweiss - 19.07.2008, 08:28 Uhr
Titel:
Es wäre ganz hilfreich, wenn du mal 2-3 Zeilen deiner
'Liste in Text, bzw Tabellenform der Dateinamen'
posten würdest
und das, was dabei als Ergebnis herauskommen soll.
stalin2000 - 19.07.2008, 11:34 Uhr
Titel:
Okay,
Die Liste sieht so aus:

Zitat:

Tocotronic - unter der Schnellstraße
Die Sterne - Big in Berlin
R.E.M. - Man on The Moon
Archive - Fuck U

Und dann möchte ich alle Ordner haben wie:

Zitat:
Die Sterne - Big in Berlin


und so weiter...
Kano - 19.07.2008, 12:16 Uhr
Titel:
Wars zu schwer mein beispiel komplett auszufüllen? Anscheinend kannst die eine fehlende Zeile nicht reinschreiben:

while read x; do
mkdir -p "$x"
done <<EOT
$(cat liste.txt)
EOT
jgese - 19.07.2008, 12:58 Uhr
Titel: Re: Automatische Ordner-Erstellung nach Namen von Dateien ?
---
blauweiss - 19.07.2008, 14:22 Uhr
Titel:
Kano hat folgendes geschrieben::
Wars zu schwer mein beispiel komplett auszufüllen?...

Vielleicht weil es so nicht geht?
Wie stalin2000 schon geschrieben hat, er kann in einem Ordner
in dem z.B. die Datei '123.txt' existiert nicht ein Verzeichnis '123.txt' erstellen,
oder kennst du da etwa einen Kniff?

Er kann eigentlich nur den Umweg über Verschieben oder Umbenennen wählen.
Verschieben vll. so (Anführungsstriche sind wichtig, da offensichtl. Leerzeichen vorhanden sind),
bediene mich mal an deinem Beispiel:

while read x; do
  
mv -f "$x" /tmp
  mkdir "$x"
  mv -f "/tmp/$x" "$x"
done <<EOT
$(cat liste.txt)
EOT

Kano - 19.07.2008, 14:45 Uhr
Titel:
Vermutlich sollte das Verzeichnis ja eh nicht .txt am ende heissen, also müsstest $(basename "$x" .txt) nehmen. Weiterhin ist bei seiner Beispielliste ja nix mit txt zu sehn!
stalin2000 - 20.07.2008, 11:55 Uhr
Titel:
Super dank Euch noch mal!

Das Script von Kano für die Erstellung von Ordnern ohne Dateilistendatei,
sowie das Script aus dem letzten Post von blauweiss, für mit Dateiliste

funktionieren.
Alle Zeiten sind GMT + 1 Stunde
PNphpBB2 © 2003-2007