Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [OPGELOST] Datum aanpassen van bestanden via CLI  (gelezen 2004 keer)

Offline quick_snack

  • Lid
  • Steunpunt: Nee
[OPGELOST] Datum aanpassen van bestanden via CLI
« Gepost op: 2011/04/01, 22:40:40 »
Hallo allemaal,

Ik heb het volgende probleem waar ik niet helemaal uitkom. Op mijn server draait een versie van Squeezeboxserver. Eén van de features van dit programma is dat je via webtoegang een overzicht kan krijgen van alle nieuwe muziek aanwinsten. Deze nieuwe albums worden in een apart overzicht weergegeven.
Periodiek wordt je muziekbibliotheek gescand waarbij alle nieuwe aanwinsten in de database worden opgenomen. Dit gaat door middel van check van de mutatiedatum van de muziekbestanden. Recentelijk heb ik wat van mijn oudere muziekbestanden gewijzigd. Hierdoor staan deze als nieuwe albums in het overzicht terwijl het helemaal geen nieuwe albums zijn.
Als nu van deze bestanden de datum terug naar het verleden kan worden gezet ben ik uit de brand en zullen de echte nieuwe albums weer in het overzicht verschijnen.

De bibliotheek is opgezet met de indeling: xxxx/xxxxx/Genre/Artiest/Album/Track - Title

Ik heb geconstateerd dat bij wijziging van de bestanden de wijzigingsdatum van de hoger liggende directory (Album) intact blijft.

Ik dacht het geheel op te lossen met het 'touch' commando waarmee je o.a. een bestand kan voorzien van een andere mutatiedatum (dit kan met de -d optie). De datum wil ik kunnen afleiden uit de parent directory.

Het volgende command had ik bedacht om dit te kunnen doen:
find /data/muziek/Albums -name '*.mp3' -print -exec touch -d `ls -ld . | awk '{print $6}'` {} \;Met dit commando worden de bestanden voorzien van een nieuwe datum, niet die van de album directory (ls -ld .) maar van de directory waar het commando is ingegeven (dus bijvoorbeeld /home/user).

man find biedt uitkomst. Er is voorzien dat find commando's met -exec voor security problemen kan zorgen omdat bepaalde commando's worden uitgevoerd in de huidige dir en niet in die waar de bestanden van find in zitten. Ze hebben dit opgelost door een nieuwe optie te introduceren genaamd -execdir. Dit betekent dat opdracht uitgevoerd na optie -execdir ook daadwerkelijk in de sub-directory van de gevonden bestanden uitgevoerd wordt.

OK...

Dus het volgende commando uitgevoerd:
find /data/muziek/Albums -name '*.mp3' -print -execdir touch -d `ls -ld . | awk '{print $6}'` {} \;ld -ld . zou nu worden uitgevoerd in de directory waar een mp3 bestand wordt gevonden, dus betrekking hebben op de album-directory en via awk zou de wijzigingsdatum worden gebruikt voor de onderliggende bestanden.

Alleen.. het werkt nog steeds niet. Zo na snelle controle lijkt het erop dat -exec en -execdir geen verschil uitmaken. De datum waarmee de bestanden worden aangepast blijft afhankelijk van de plek waar ik sta.

Wie kan wat licht schijnen op deze zaak? Help!
« Laatst bewerkt op: 2011/04/03, 04:50:22 door quick_snack »
Hmmmm. De server dappert de server-install.
In de huiskamer zijn de raampjes weer terug...

Offline quick_snack

  • Lid
  • Steunpunt: Nee
Re: Datum aanpassen van bestanden via CLI
« Reactie #1 Gepost op: 2011/04/01, 23:04:07 »
Ik heb wat zitten rommelen met gawk ipv awk en er zit verschil in, moet nog verder testen, ik kom erop terug..
Hmmmm. De server dappert de server-install.
In de huiskamer zijn de raampjes weer terug...

Offline quick_snack

  • Lid
  • Steunpunt: Nee
Re: Datum aanpassen van bestanden via CLI
« Reactie #2 Gepost op: 2011/04/02, 03:22:34 »
Hmm, had geen effect. Ik probeer het op een andere manier. Het volgende commando werkt wel goed alleen geeft problemen met spaties in pad- en bestands-naam:
for t in $(find /data/muziek/Albums -name '*.mp3'); do dat="ls -ld ${t:0:`expr $t : '.*/'`-1}"; touch -d `$dat | awk '{print $6}'` $t ; doneProbleem hierbij is dat de bestandsnamen in stukjes worden gehakt als er spaties in zitten.

/data/muziek/Albums/Genre/Artiest/Album/01_dit_is_een_nummer.mp3 gaat goed.
/data/muziek/Albums/Genre/Artiest/Nieuw Album/01 - Eerste Nummer.mp3 gaat dus fout en wordt opgesplitst in:

/data/muziek/Albums/Genre/Artiest/Nieuw
Album/01
-
Eerste
Nummer.mp3

Als iemand mij nog kan zeggen hoe dit op te lossen... :D
« Laatst bewerkt op: 2011/04/02, 03:24:37 door quick_snack »
Hmmmm. De server dappert de server-install.
In de huiskamer zijn de raampjes weer terug...

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
Re: Datum aanpassen van bestanden via CLI
« Reactie #3 Gepost op: 2011/04/02, 09:59:30 »
for x in $(find /data/muziek/Albums -name '*.mp3'); do pushd $(basename "$x"); touch -d $(ls -ld . | awk '{print $6}') "$x"; done
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline quick_snack

  • Lid
  • Steunpunt: Nee
Re: Datum aanpassen van bestanden via CLI
« Reactie #4 Gepost op: 2011/04/02, 14:38:09 »
Citaat
for x in $(find /data/muziek/Albums -name '*.mp3'); do pushd $(basename "$x"); touch -d $(ls -ld . | awk '{print $6}') "$x"; done

Bedankt voor je reactie maar volgens mij werkt het nog niet goed. Ik heb spaties in de namen van dirs en bestanden staan en daar loopt de for x in $(find... mee stuk. Kijk maar naar mijn vorige mail. Ook pushd $(basename "$x") wil springen naar een bestandsnaam als directory dat werkte ook niet.

Misschien dat ik het vanuit de directories moet bedenken met find - type d -depth x of zo iets en dan een touch -d xxxxxx <dirnaam>/*
Hmmmm. De server dappert de server-install.
In de huiskamer zijn de raampjes weer terug...

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
Re: Datum aanpassen van bestanden via CLI
« Reactie #5 Gepost op: 2011/04/02, 15:31:23 »
Citaat
for x in $(find /data/muziek/Albums -name '*.mp3'); do pushd $(basename "$x"); touch -d $(ls -ld . | awk '{print $6}') "$x"; done

Bedankt voor je reactie maar volgens mij werkt het nog niet goed. Ik heb spaties in de namen van dirs en bestanden staan en daar loopt de for x in $(find... mee stuk. Kijk maar naar mijn vorige mail. Ook pushd $(basename "$x") wil springen naar een bestandsnaam als directory dat werkte ook niet.

Misschien dat ik het vanuit de directories moet bedenken met find - type d -depth x of zo iets en dan een touch -d xxxxxx <dirnaam>/*

for x in "$(find /data/muziek/Albums -name '*.mp3')"; do pushd "$(basename "$x")"; touch -d "$(ls -ld . | awk '{print $6}')" "$x"; done

Dit zou moeten werken... Ik was de aanhalingstekens vergeten.
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline quick_snack

  • Lid
  • Steunpunt: Nee
Re: Datum aanpassen van bestanden via CLI
« Reactie #6 Gepost op: 2011/04/02, 19:15:28 »
for x in "$(find /data/muziek/Albums -name '*.mp3')" zorgt voor één enkele lange string tussen ". Ook de basename functie zorgt voor de bestandsnaam en niet de directory
Hmmmm. De server dappert de server-install.
In de huiskamer zijn de raampjes weer terug...

Offline quick_snack

  • Lid
  • Steunpunt: Nee
Re: Datum aanpassen van bestanden via CLI
« Reactie #7 Gepost op: 2011/04/03, 04:49:20 »
Ik heb het kunnen oplossen door inderdaad niet van de bestanden maar van de hoger liggende subdir (album directory) uit te gaan. Na veel lezen op inet kwam ik tot het volgende:
find /data/muziek/Albums -mindepth 3 -type d -mtime +10 -print0|while read -d $'\0' file; do touch -d `ls -ld "$file" | awk '{print $6}'` "$file"/* ; done
Overigens is het volgende commando een mooie oplossing om met dergelijke probleempjes om te gaan. Komt trouwens van hier

find . -print0 | while read -d $'\0' file; do echo "$file"; done
Hmmmm. De server dappert de server-install.
In de huiskamer zijn de raampjes weer terug...