2016-08-22 3 views
1

после проблемы HD и некоторые работы, у меня есть куча файлов с именами, как «f1234», «f1235» и т.д.Сортировка файлов в соответствии с их типом файла

Моя цель состоит в том, чтобы отсортировать эти файлы в соответствии с их тип файла. Например, я хочу переместить все файлы PDF в каталог «pdfs».

Для одного файла я могу сделать: «файл f1234», и если это PDF, я могу «mv f1234 pdfs /». Но у меня есть тысячи файлов ... Можете ли вы помочь мне с командой bash или zsh для сортировки всего PDF за один проход? Спасибо

+1

'for f in f *; do case $ (файл «$ f») в формате PDF) echo/bin/mv "$ f" /path/to/pdf/dir/"$f".pdf ;; *) echo "не PDF $ f" 1> &2 ;; esac; done'. Внимательно изучите вывод, и если он выглядит нормально, удалите «echo» в папке PDF. Вам придется изменить 'в PDF', чтобы соответствовать реальному выводу' file f1234', когда это PDF. (Dbl-quote строка соответствия, если есть пробелы). Удачи. – shellter

ответ

5

Жесткая часть здесь надежно превращает вывод file в имя каталога. Я думаю, что лучшим кандидатом для этого является тип файла mime, а не человеческий читаемый вывод file. Я хотел бы использовать что-то вроде:

mkdir sorted 
for f in f* 
do 
    d=$(file -b --mime-type "$f" | tr/-) 
    mkdir -p "sorted/$d" 
    mv "$f" "sorted/$d/" 
done 

Очевидно, что я бы проверить, что из немного, прежде чем запустить его на ваши файлы, но что-то очень близко к тому, что должно работать.

+1

'файл -bi" $ f "| cut -d ';' -f1 | tr/-' можно сократить до 'file -b -mime-type" $ f "| tr/-'. – alvits

+0

Ах, это лучше! Я изменю ответ, чтобы это отразить. – Julian

Смежные вопросы