статистика не работает с пробелами?

Я использую скрипт для копирования некоторых файлов в зависимости от года, в котором они были созданы, он отлично работает с файлами без пробелов, но с файлами с пробелами возникает проблема с командой статистики, например, у меня есть этот файл: file with spaces.pdf

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

возвращает год, например: 2017

но при использовании внутри скрипта:

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

это не похоже на работу, и если бы я сделал вывод:

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

и скопируйте его в терминал, он работает, ошибка во всех случаях одинакова, это как игнорирование этой части имени файла: with\ spaces.pdf :

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

Я пробовал добавлять кавычки к пути, и он, похоже, не работает:

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

Я где-то видел, что мне нужно разместить статистику в функции, которую я сделал:

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

но он, похоже, не работает, я получаю ту же ошибку, если вы можете дать мне свою помощь, что было бы здорово.

  • bash script «Нет такого файла ...»
  • Сценарий оболочки для перемещения файлов между двумя каталогами
  • Каковы существенные различия между различными раковинами?
  • Приостановка и перезапуск всех процессов Python
  • Перенаправление stdout и stderr определенных строк
  • Установить идентификатор родительского процесса из ShellScript, позже удалить все дочерние процессы
  • Предотвращение расширения определенного пространства в переменной
  • наблюдение за выполнением скрипта с помощью скрипта monit, похоже, игнорирует каналы
  • One Solution collect form web for “статистика не работает с пробелами?”

    Процитируйте ваши переменные в bash , не делая их, разделив ваши слова в переменной на отдельные токены, а команда, использующая эту переменную, будет получать несколько слов, когда ожидалось единственную строку (см. Раздел « Разделение слов в оболочке»)

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

    Я полагаю, что ваша проблема в вашей переменной, которую вы используете, вместе с последовательностью escape-последовательности. Вам нужно сделать один из них.

     pathfile="/path/to/file with spaces" 
    Linux и Unix - лучшая ОС в мире.