Необходимо заключить формат в кавычки до настоящего времени после +
знак.
$ date +"%Y/%m %b"
2013/10 Oct
Относительно переменных. $MOVEDIRSTR
кажется ненужным.
MOVEDIR=$(sed -r -e 's:([0-9]{4})([0-9]{2})([0-9]{2}).*:date -d \1-\2-\3 +%Y/%m_%b/%d:' <<< "$line")
С тех пор с $FLIST
Вы анализируете даты из того каталога, я не вижу более чистый путь.
Учитывая обратную связь OP в комментариях ниже, он использует устройство QNAP и настолько так имеет смягченную версию этих команд, обеспеченных BusyBox. Если Вы смотрите на команду даты как так: ls -l /bin/date
это - вероятно, ссылка на исполняемый файл, названный busybox или чем-то подобным. Эти команды не полнофункциональны, следовательно Ваши проблемы.
Он подтвердил это:
Вы, вероятно, правы. Моя дата является своим собственным исполняемым файлом, но/bin/sed-> busybox
Учитывая ограничения выше не могут работать методы, обсужденные, так как Вы работаете с ограниченным набором функций с этими инструментами.
Как @ G-Man прокомментировал, вы [можете «Читайте каталоги в качестве файла , когда каталоги перестали быть читабельными в качестве файлов? ;
вместо этого, чтобы найти номера I-узлов, вы могли бы использовать
stat
➜ stat -x . File: "." Size: 1632 FileType: Directory Mode: (0755/drwxr-xr-x) Uid: ( 501/ barisa) Gid: ( 20/ staff) Device: 1,2 Inode: 5431597 Links: 48 Access: Sun Dec 14 15:17:23 2014 Modify: Sun Dec 14 14:16:25 2014 Change: Sun Dec 14 14:16:25 2014