![Выберите определенную часть выходных данных и используйте ее для переименования файлов.](https://rvso.com/image/1497067/%D0%92%D1%8B%D0%B1%D0%B5%D1%80%D0%B8%D1%82%D0%B5%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%20%D1%87%D0%B0%D1%81%D1%82%D1%8C%20%D0%B2%D1%8B%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D1%85%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B8%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B9%D1%82%D0%B5%20%D0%B5%D0%B5%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2..png)
Я сейчас сортирую файлы, которые я восстановил из сломанной файловой системы. Теперь у них у всех есть имена файлов, которые выглядят примерно так: f123123123.xls
Если я запускаю файл «f123123123.xls», он выдает мне массу информации, а иногда даже дату последнего сохранения.
Пример:
./recup_dir.89/f111841280.xls: Файл составного документа V2 Document, Little Endian, ОС: Windows, Версия 1.0, Кодовая страница: -535, Номер редакции: 5, Общее время редактирования: 09:58:37, Последняя печать: Ср Сен 9 11:57:04 2015, Время/дата создания: Чт Сен 3 03:15:36 2015, Время/дата последнего сохранения: Пн Окт 19 14:28:03 2015
Как мне выбрать последнюю сохраненную дату и использовать ее, чтобы переименовать мой файл, например, в: Oct-19-2015.xls?
решение1
Мы можем связать несколько команд вместе, чтобы сделать это. Я собираюсь сделать так, чтобы этот пример записывал переименованные файлы в другой каталог, их можно перемещать куда угодно, но лично я предпочитаю хранить их отдельно на случай, если у меня будет несколько фальстартов.
mkdir renamed
for recovered in recup_dir.89/*xls; do
new_name=$(date +'%b-%d-%Y' -d "$(file "$recovered"| grep -Po 'Last Saved Time/Date:\K[^,]*')")
if [ -n "$new_name" ]; then
mv "$recovered" "renamed/$new_name.xls"
fi
done
это переберет все xls-файлы в каталоге (так как эта информация не будет в выводе всех файлов). Для каждого из них команда будет запущена file
и использовано регулярное выражение GNU grep в стиле perl для поиска, где Last Saved Time/Date:
появляется, а затем будет получено только время после этого. Затем мы используем команду date
для переформатирования этого времени так, как вам нужно, поэтому нам не придется много манипулировать отдельными полями в выводе.
Это даст нам дату в формате Oct-19-2015
, и мы затем используем это значение в mv
команде, как и ожидалось, но только если мы действительно получили дату обратно. Если ничего не получили обратно, не пытайтесь переименовать файл (на всякий случай, если что-то не всегда работает правильно с предыдущей цепочкой команд).