Anexar timestamp unix a arquivos com espaço usando um script

3

Este script funciona bem para todos os arquivos de forma recursiva, mas não nomeia arquivos com espaço intermediário. Por exemplo, ele gera erro para os arquivos "este é um test.txt" ou "arquivo de teste.txt"

Alguma ideia de como consertar isso?

   #!/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
    
por money 26.12.2014 / 02:06

2 respostas

2

Tente isso:

 #!/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

Se você não tem bash4:

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

Não esqueça de aspas duplas todas as variáveis!

Veja link , link e link .

    
por 26.12.2014 / 02:09
2

Tente um loop while delimitado por nulo (e lembre-se de citar todas as expansões de variáveis):

#!/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)
    
por 26.12.2014 / 03:19