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
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:
| #!/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:
| #!/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
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)
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 ? | 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
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:
| 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)
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:
| 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
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
sehr simpel vergeben können.
|