ubuntuusers.de

Per "touch" mehrere Dateien ändern

Status: Gelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

Antwort42

Avatar von Antwort42

Anmeldungsdatum:
6. November 2007

Beiträge: 8

Hallo zusammen,

ich habe ein Problem mit Dateien das ich gern per shell gelöst hätte. Ein Verzeichnis mit einigen Dateien möchte ich per "touch" ein neues Erstellungsdatum geben.

Bsp: touch -t 201103021111 test.mp3 touch -t 201103021112 test2.mp3

Uhrzeit soll aufsteigend sein, z.b. um eine Minute oder so.

Ich habe es so versucht:


#!/bin/bash

datei=$(find . -type f);

for i in $datei do sleep 1m; touch $i; done


das funktioniert so leider nicht. Entweder erhalte ich eine Fehlermeldung: touch test2.mp3 – Permissions denied (was ich darauf zurückführe das ich nicht mehrere Dateien in $datei speichern kann. Oder: das script schläft durch. (sleep 1m) und ändert nur eine Datei.

Meine Scriptkenntnisse sind jetzt aber leider nicht so gross, daher hier die Frage: Wie bekomme ich das Erstellungsdatum geändert? Jede Datei von Hand zu "touchen" wäre hier leider zu umfangreich.

Vielleicht hat ja jemand eine Idee....? –- Benny –-

Midhas

Avatar von Midhas

Anmeldungsdatum:
16. Dezember 2005

Beiträge: 238

Was ist denn mit einem einfachem:

find . -type f -iname *.mp3 -exec touch {} \;

... oder war Dein Code Teil eines Scriptest ?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Wenn alles in einem Verzeichnis liegt, versuch mal so etwas:

1
2
3
4
5
6
7
#!/bin/bash
FILES=/das/Verzeichnis/mit/den/mp3s/*.mp3
for f in $FILES
  do
    touch f
    sleep 1m
  done

bzw. nutze noch einen Zähler für das Datum:

1
2
3
4
5
6
7
8
#!/bin/bash
FILES=/das/Verzeichnis/mit/den/mp3s/*.mp3
DATE=$(date +%s)
for f in $FILES
  do
    touch -t $(date -d @$DATE +%Y%m%d%H%M) $f
    DATE=$(( $DATE + 60 ))
  done

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

Hi,

also 'permissions denied' heißt, dass du auf die Datei(en) keine Schreibrechte hast; somit hat es dein Script auch nicht.

Die vorgeschlagenen Lösungen sollten funktionieren; eine Kombination mit find und dem Zähler ist ebenfalls möglich - würde ich bevorzugen. Aber, warum willst du überhaupt Erstellungsdaten einer Datei ändern?

Mokkujin

Anmeldungsdatum:
2. Mai 2008

Beiträge: 389

Wohnort: Hannover

Ist vielleicht eine blöde Idee , Skript über sudo starten ?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Nee Leute, bitte keine "wilden" Vorschläge.

Offenbar ist das ein "Quoting"-Problem:

datei="$(find . -type f)"

so dass ein Leerzeichen im Dateinamen das Skript platzen lässt.

Und natürlich findet er so einen zerschnipselten Dateinamen nicht, im besten Fall.
(Wenn Du Pech hast, schlachtet er Dir unbeteiligte Dateien. Und mit sudo umso gründlicher)

Der Vorschlag von seahawk1986 solte gehen, wenn man ihn nur richtig "quotet":

#!/bin/bash
for f in "/das/Verzeichnis/mit/den/mp3s/"*.mp3 ; do
    touch "$f"
    sleep 1m
done

track

Mokkujin

Anmeldungsdatum:
2. Mai 2008

Beiträge: 389

Wohnort: Hannover

Touche ☺ Sagte ja blöde Idee

Antwort42

(Themenstarter)
Avatar von Antwort42

Anmeldungsdatum:
6. November 2007

Beiträge: 8

Danke an Midhas und seahawk1986 das werde ich heute nachmittag gleich einmal testen.

@theinlein: Hintergrund ist das die mp3 dateien in meinem Verzeichnis alle das gleiche Erstellungsdatum haben und mein mp3-player diese nach Erstellungsdatum abspielt.... somit kommt kap 4 vor kap 2 und 3 vor.... du verstehst? Also dachte ich mir das ganze über ein Script zu ändern, da es ja mehrere Dateien sind.

@track es ist kein Quoting Problem... im Testverzeichnis sind nur Dateien sie so benannt sind: test-txt1.mp3 test-txt2.mp3 usw.

Aber ich werde das mit den Quoting's auf jeden fall testen und hier dann das endgültige Script hier Posten, wenn's denn funktioniert.... 😉

mit sudo funktioniert es mit meinem script .. siehe oben .. auch nicht. Gleiche Fehlermeldung.

Danke schonmal im vorraus.... –- Benny –-

Mokkujin

Anmeldungsdatum:
2. Mai 2008

Beiträge: 389

Wohnort: Hannover

So sollte es doch klappen oder ?

1
find "DEIN PFAD" -type f -exec touch -t 201103021111 {} \;

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Der Vorschlag von seahawk1986 solte gehen, wenn man ihn nur richtig "quotet":

#!/bin/bash
for f in "/das/Verzeichnis/mit/den/mp3s/"*.mp3 ; do
    touch "$f"
    sleep 1m
done

Ach man muss doch nur die eventuellen Leer- und Sonderzeichen im Pfad richtig escapen... 😇

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

@Mokkujin: so bekommen doch alle den gleichen Zeitstempel. Den haben sie schon.

Im Verzeichnis mit den mp3s:

1
for f in *.mp3 ; do touch "$f" && sleep 1 ; done

u.U. in ein Skript packen, und für mehrere Verzeichnisse je ein Skript parallel starten.

Edit: Oh, 2 min. zu spät. ☺

Antwort42

(Themenstarter)
Avatar von Antwort42

Anmeldungsdatum:
6. November 2007

Beiträge: 8

Hi @ all

Thx @user unknown und @seahawk1986 beide scripte haben funktioniert.

Dein Script Seahawk werde ich wohl, ein wenig angepasst, für die automation nutzen, und andere Funktion nutze ich ersteinmal bis ich das Script angepasst habe.

Somit markiere ich diesen Threat als gelöst.

CU –-Benny-–

Mokkujin

Anmeldungsdatum:
2. Mai 2008

Beiträge: 389

Wohnort: Hannover

user unknown schrieb:

@Mokkujin: so bekommen doch alle den gleichen Zeitstempel. Den haben sie schon.

Im Verzeichnis mit den mp3s:

1
for f in *.mp3 ; do touch "$f" && sleep 1 ; done

u.U. in ein Skript packen, und für mehrere Verzeichnisse je ein Skript parallel starten.

Edit: Oh, 2 min. zu spät. ☺

Er wollte doch überall den gleichen Zeitstempel oder hab ich das falsch verstanden ?

Hmm naja egal ist ja gelöst 😉

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Mokkujin schrieb:

Er wollte doch überall den gleichen Zeitstempel oder hab ich das falsch verstanden ?

Seine Idee war jeweils einen um z.B. eine Minute abweichende Zeitstempel zu erzeugen, damit sein MP3-Player die Dateien in der richtigen Reihenfolge darstellt.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Uhrzeit soll aufsteigend sein, z.b. um eine Minute oder so.

Ich sehe da wenig Interpretationsspielraum. Die gleiche Zeit würde man dagegen mit

1
touch *.mp3

sehr simpel vergeben können.

Antworten |