Я восстанавливаю ряд архивов с датами в их именах, что-то вроде:
user-2018.12.20.tar.xz
user-2019.01.10.tar.xz
user-2019.02.25.tar.xz
user-2019.04.19.tar.xz
...
Я хочу установить дату модификации каждого файла так, чтобы она соответствовала дате в их имени файла, передавая по трубопроводуимена файлов: touch
через xargs
и использование replace-str
для установки дат.
touch -m -t
займет дату-время в формате [CCYYMMDDhhmm]
, но у меня возникли проблемы с заменой встроенного:
find . -name "*.xz" | xargs -I {} touch -m -t $(sed -e 's/\.tar\.xz//g; s/user-//g; s/\.//g; s/\///g; s/$/0000/g' {}) {}
Возвращает touch: invalid date format ‘./user-2018.03.22.tar.xz’
, даже если это:
find . -name "*.xz" | sed -e 's/\.tar\.xz//g; s/user-//g; s/\.//g; s/\///g; s/$/0000/g'
Возвращает правильно отформатированные даты, например 201812200000
.Я неправильно использую подстановку команд в моей строке замены?
РЕДАКТИРОВАТЬ: Да, простой сценарий может сделать это без проблем.Но вопрос остается ...