aanmaakdatum aan bestandsnaam toevoegen (bash)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Wtrdk
  • Registratie: Mei 2006
  • Laatst online: 03-09 11:39
Ik weet hoe ik in de CLI de huidige datum aan een bestandsnaam kan toevoegen, maar ik zou graag de aanmaakdatum (of last-modified date) aan een bestandsnaam toevoegen. Bijvoorbeeld:

ls -l:
-rw-rw-r--  1 user group    245M Jun 26 12:34 test.mp4


moet worden

2014-06-26_test.mp4


Of een variant (20140626_test.mp4 oid)
Heeft iemand een tip?

Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 08:29
stat, date, find, mv

Succes.

Acties:
  • 0 Henk 'm!

  • Wtrdk
  • Registratie: Mei 2006
  • Laatst online: 03-09 11:39
Thanks, je hebt me op het goede spoor gezet. Na wat knutselen doet dit proecies wat ik wil:
code:
1
2
3
4
5
6
7
8
9
#!/bin/bash
#
for file in `ls`;
do $(
MODDATE=$(stat -c %y ${file})
MODDATE=${MODDATE%% *}
mv ${file} $MODDATE\ ${file}
);
done

Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 08:29
Ik had zelf 't volgende bedacht, handig als je toch nog 't format wil aanpassen.

date -d @`stat -c %Y testfile` +%Y%m%d

Acties:
  • 0 Henk 'm!

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 01-10 08:15

deadinspace

The what goes where now?

w.d schreef op dinsdag 01 juli 2014 @ 14:27:
Thanks, je hebt me op het goede spoor gezet. Na wat knutselen doet dit proecies wat ik wil:
code:
1
2
3
4
5
6
7
8
9
#!/bin/bash
#
for file in `ls`;
do $(
MODDATE=$(stat -c %y ${file})
MODDATE=${MODDATE%% *}
mv ${file} $MODDATE\ ${file}
);
done
Ik heb wat algemene shell-scripting tips voor je die de robuustheid en de leesbaarheid van je scripts ten goede zouden moeten komen :)
  • Het gebruik van `ls` is onnodig, je kunt gewoon * gebruiken. Dat is ook robuuster, want als je bestanden hebt met spaties in de naam dan gaat dat mis in het geval van `ls`, maar het gaat wel gewoon goed met *.
  • Gebruik liever $(hoi) in plaats van `hoi`. Backticks zijn slecht leesbaar en worden snel verward met gewone quotes.
  • Bij het gebruik van je variabelen is het meestal aan te raden om deze in dubbele quotes te zetten, weer om te zorgen dat het goed gaat als je bestanden met spaties in de naam hebt. Dus rm "$BLA".
  • Het gebruik van $() in de do-done en de puntkomma na for is niet nodig.
Je zou dan zoiets krijgen:
code:
1
2
3
4
5
6
7
8
#! /bin/bash          
 
for file in *
do
    MODDATE=$(stat -c %y "${file}")
    MODDATE=${MODDATE%% *}
    mv "${file}" "$MODDATE ${file}"
done

Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

deadinspace schreef op dinsdag 01 juli 2014 @ 19:20:
[...]

Ik heb wat algemene shell-scripting tips voor je die de robuustheid en de leesbaarheid van je scripts ten goede zouden moeten komen :)
  • Het gebruik van `ls` is onnodig, je kunt gewoon * gebruiken. Dat is ook robuuster, want als je bestanden hebt met spaties in de naam dan gaat dat mis in het geval van `ls`, maar het gaat wel gewoon goed met *.
Let op! Als het aantal files in de directory erg groot kan zijn dan kan die "for i in *" ook problemen geven.
Mocht je zoiets verwachten kan je ook:
Bash:
1
2
3
4
find . | while read FILE
do
   #...
done

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 01-10 21:30

Hero of Time

Moderator LNX

There is only one Legend

H!GHGuY schreef op dinsdag 08 juli 2014 @ 19:45:
[...]


Let op! Als het aantal files in de directory erg groot kan zijn dan kan die "for i in *" ook problemen geven.
Mocht je zoiets verwachten kan je ook:
Bash:
1
2
3
4
find . | while read FILE
do
   #...
done
Dat doet 't recursief, maar ook voor mappen en symlinks. Beter doe je dan, voor enkel huidige map, dan dit:
code:
1
2
3
4
find . -maxdepth 1 -type f | while read FILE
do
    stuff
done

Commandline FTW | Tweakt met mate

Pagina: 1