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

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

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

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

  • Подстроки в сценарии оболочки
  • Скрытие пользователя из последней команды
  • окончание bash очень неполное на centos 7
  • bash: проверьте, находится ли переменная в
  • Как получить подстроку, основанную на индексе другой строки
  • Освободить некоторые устройства от NAT
  • но при использовании внутри скрипта:

     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 для передачи аргументов скрипту
  • «Тюнинг» выражения tr и sed
  • Сбой ядра с программным RAID-1 из-за ошибок чтения одного диска
  • Матрицы стиля Zsh с Bash
  • Поиск рекурсивно большого файла
  • Показывать сумму файлов в списке каталогов
  • One Solution collect form web for “статистика не работает с пробелами?”

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

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

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

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