Ajouter un timestamp unix aux files avec un espace en utilisant un script

Ce script fonctionne bien pour tous les files récursivement aussi, mais il ne nomme pas les files qui ont de l'espace entre les deux. Par exemple, il lance une erreur pour les files "ceci est un test.txt" ou "test file.txt"

Toute idée de comment résoudre ce problème?

#!/bin/bash dir="/data/" #for filename in `ls -1t $dir/` for filename in `find $dir -type f` do i=".`date -r $filename +%s`" mv $filename $filename$i done 

Essayez ceci à la place:

  #!/bin/bash shopt -s globstar # require bash4 : recursive dir="/data/" for filename in $dir**; do i=".$(date -r $filename +%s)" mv "$filename" "$filename$i" done 

Si vous n'avez pas bash4:

 find "$dir" -type f -exec bash -c ' i=".$(date -r $1 +%s)" mv "$1" "$1$i" ' -- {} \; 

N'oublie pas de citer toutes les variables!

Voir http://mywiki.wooledge.org/Quotes , http://mywiki.wooledge.org/Arguments et http://wiki.bash-hackers.org/syntax/words .

Essayez plutôt une boucle while délimitée par un caractère nul (et n'oubliez pas de citer toutes les expansions de variables):

 #!/bin/bash dir="/data/" while IFS= read -r -d '' filename do i="$(date -r "$filename" +%s)" mv -- "$filename" "$filename.$i" done < <(find "$dir" -type f -print0)