Автор |
Сообщение |
ProFfeSsoRr Гуру |
|
Восстановил я нечаянно отформатированный раздел. Имею тучу файлов с рандомными именами. Надо найти среди них все файлы MS Word (ака doc) и закинуть в одну папку. Идеи? |
|
|
|
|
BorPas Девелопер |
|
у всех микрософт форматов (doc,xls,ppt,msi и т.д.) в начале файла D0 CF 11 E0 A1 B1 1A E1 (стандартная шапка файла IStream)
запускаем поиск в тотале
можно ещё потом среди найденныйх по текстовой подстроке поискать "Word.Document." - doc, "Excel.Sheet." - xls и т.п. |
|
|
|
|
ProFfeSsoRr Гуру |
|
Ну я под линукс софт имел в виду, а не тотал, т.к. аналог тотала Krusader по hex искать не умеет, а чем еще искать так я вообще не в курсе |
|
|
|
|
BorPas Девелопер |
|
BorPas писал(а): |
по текстовой подстроке поискать "Word.Document." - doc, "Excel.Sheet." - xls и т.п. |
в конце концов тотал скачай и под вайном запусти |
|
|
|
|
konst-t Форумчанин |
|
ProFfeSsoRr писал(а): |
Надо найти среди них все файлы MS Word (ака doc) |
|
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
|
|
|
ProFfeSsoRr Гуру |
|
konst-t ну-ну, заголовок-то прочти - "без расширения". Так что фильтр - * и ничего более. А просто текстовых файлов там уйма, делал я такой поиск, еще и минимальный размер ставил от 5 Кб, чтобы уж совсем мелкие конфиги не попадались, все равно примерно 2 тысячи результатов получилось (когда документов должно быть около 200-300). |
|
|
|
|
ProFfeSsoRr Гуру |
|
Так, у меня снова дошли руки до этого.
1) wine и total commander - дичайшее извращение: комп, на котором мне это надо, очень дохлый
2) konst-t файлы офиса не относятся к текстовым файлам, они application/msword ака application/vnd.ms-office (как выводит их mime-type команда file)
3) собсна, по идее команда file мне и нужна. Допер до строки вида "file -k --mime-type /test/* /test/.* | grep application/vnd.ms-office", получающей список всех файлов внутри папки test, но не внутри её подпапок. Вот сижу и думаю, как же получить список всех файлов еще и из подпапок, и как далее скриптом вытаскивать из каждой строки все, что идет до ":" (т.к. это будет полный путь к файлу) и дописывать ".doc" к каждому такому файлу. |
|
|
|
|
ProFfeSsoRr Гуру |
|
Хм, сваял такой вот скрипт:
Код: |
cd ${pwd}
find -type f | sort -n |while read filename;
do
echo "Check --> "${filename}
if (file -k --mime-type ${filename} | grep application/vnd.ms-office > /dev/null); then
cp $filename /tmp/docs/$(echo $filename |sed -e "s|[^/]*/||g")".doc"
echo "Copy --> "${filename}
fi
done
exit 0 |
Он че-то нашел, но далеко не все. Ничего не понимаю оО Убрал "sort -n" - стал находить чуть побольше. Но все равно мало. Тестил на папке с 2000 файлов, при этом в консоль, по идее, мне должно 2000 раз вывести слово "Check -->", но вывелось оно всего раз 20-30. Пробовал убирать опцию -k у file (т.к. по логике она не нужна, просто забыл убрать её после тестов) - ничего не изменилось. Самое-то забавное, что "find -type f" нормально выводит все 2000 файлов! |
|
|
|
|
ProFfeSsoRr Гуру |
|
Код: |
#!/bin/bash
#
cd /path
find . -type f -exec file --mime-type '{}' \; | awk 'BEGIN {FS=":"} /application\/msword/ {print $1}' | xargs -I@ echo @ |while read filename
do
cp "${filename}" "/tmp/docs/$(echo ${filename} |sed -e "s|[^/]*/||g")".doc""
echo "Copy --> "${filename}
done
exit 0 |
Вот так вот оно делается |
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
ProFfeSsoRr
Иди покупай свитОр =) |
|
|
|
|
ProFfeSsoRr Гуру |
|
Richard Ferlow не-не-не, я ток как на аватарке |
|
|
|
|
|