stats não funciona com espaços?

2

Estou usando um script para copiar alguns arquivos dependendo do ano em que eles foram criados, ele funciona bem com arquivos sem espaços, mas com os arquivos com espaços, há um problema com o comando stats, por exemplo, eu tenho esse arquivo: file with spaces.pdf

stat -c %y ./path/to/file\ with\ spaces.pdf|cut -d '-' -f 1

retorna o ano, por exemplo: 2017

mas quando usado dentro de um script:

year=$(stat -c %y $pathfile | cut -d '-' -f 1)

não parece o trabalho, e se eu tirei a saída de:

 echo "stat -c %y file | cut -d '-' -f 1"

e copie-o em um terminal que funciona, o erro é o mesmo em todos os casos, é como ignorar essa parte do nome do arquivo: with\ spaces.pdf :

stat: cannot stat './path/to/file\': No such file or directory

Eu tentei adicionar cotações ao caminho e parece que não funciona:

year=$(stat -c %y "$pathfile" | cut -d '-' -f 1)

Eu vi em algum lugar que eu preciso colocar as estatísticas em uma função, o que eu fiz:

 makestats () {
 $(stat -c %y $1|cut -d '-' -f 1)
 }

mas parece que não funciona, recebo o mesmo erro se você puder me dar sua ajuda, o que seria ótimo.

    
por Kingofkech 04.10.2017 / 15:40

1 resposta

6

Cite suas variáveis em bash , não fazê-las irá dividir suas palavras na variável para tokens individuais e o comando que usa essa variável estará recebendo várias palavras quando era esperado uma única string (Veja Word Splitting no shell)

year=$(stat -c %y "$pathfile" | cut -d '-' -f1)

Suponho que seu problema esteja na sua variável que você está usando " junto com a sequência de escape \ . Você precisa fazer um dos dois.

pathfile="/path/to/file with spaces"
    
por 04.10.2017 / 15:42