Выберите определенную часть вывода и используйте ее для переименования файлов

В настоящее время я сортирую файлы, которые я восстановил из поврежденной файловой системы. Теперь у них есть имена файлов, которые выглядят примерно так: f123123123.xls

Если я запускаю: файл "f123123123.xls", он дает мне много информации, а иногда даже последнюю сохраненную дату.

Пример:

./recup_dir.89/f111841280.xls: файл составного документа V2 Document, Little Endian, Os: 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 команда, как и следовало ожидать, но только если мы действительно вернули дату. Если что-то не вернулось, не пытайтесь переименовать файл (на тот случай, если с предыдущей цепочкой команд все не всегда получается правильно).

Другие вопросы по тегам