FSF недавно отбросил GNU PDF из их списка приоритетных проектов, потому что библиотеки как poppler, podofo, MuPDF и Apache PDFBox разработали вполне приятно за прошлые годы. Учитывая скорость разработки GNU PDF за прошлые годы я испытываю желание назвать это ледниковым: у Них, кажется, проводят все их время в фундаментах зданий и до сих пор, кажется, нет, по крайней мере, минимального синтаксического анализатора. Кажется, что GNU Hurd будет закончен перед GNU PDF.
Посмотрите здесь для списка библиотек PDF.
for i in $(tree -dfi --noreport); do
find $i -type f \( -iname "*.jpg" -or -iname "*.jpeg" \) -exec du {} \;
done
Отбросьте путь в конце find
команда и -type
опция должна появиться перед любыми другими опциями сделать поиск немного быстрее. Это должно сделать это.
Между прочим, для помощи Вам немного я сделал бы это таким образом:
for i in $( tree -dfi --noreport ); do
find $i -maxdepth 1 -type f \( -iname "*.jpg" -or -iname "*.jpeg" \) -exec du '{}' \; | awk -v d=$i '{ j+=$1; } END{ printf("%s: %d\n", d, j) }' | grep -Ev ": 0$"
done
Ваша непосредственная ошибка состоит в том что дополнительна $i
в конце find
вызов — просто удаляет его. Порядок аргументов в пользу find
является первым каталоги для пересечения, затем выражение для соответствия.
Я не понимаю назначение вызова к tree
: find
может сделать это. С GNU находят (т.е. на Linux или Cygwin), предполагая, что Ваши каталоги не содержат безумно многих .jpg
файлы, -execdir
основной на find
позволяет Вам выполнить команду на всех файлах соответствия в каталоге.
find . \( -name '*.jpg' -o -name '*.jpeg' \) -execdir sh -c 'echo "$(du -c "$@" | sed -n "\$s/\\t.*//p") ${PWD#$0/}"' $PWD {} +
Обратите внимание, что версии GNU находят до 4.5.9, имеют ошибку, которая вызывает -execdir … {} +
выполнять одну команду на файл, который бесполезен здесь. Таким образом, Вам, вероятно, придется работать усерднее.
Можно пересечь дерево каталогов в ударе. Установите globstar
опция включить шаблон **/
, который соответствует любому количеству уровней подкаталога, т.е. оно перечисляет подкаталоги рекурсивно. В каждом подкаталоге, если существуют файлы JPEG, вызов du
вычислить их общий размер.
shopt -s globstar
for d in **/*/; do
files=("$d/"*.jpg "$d/"*.jpeg)
total=$(du -s -- "$files" 2>/dev/null | tail -n 1)
total=${total%$'\t'*}
echo "$total"$'\t'"$d"
done
-execdir
также. Также, кажется, работает с именами dir, содержащими пробелы. Я только что начинаю с ударом, но я люблю, как существует столько способов сделать вещи как это. Я не мог найти способ сделать это в соответствии с Windows, таким образом, смонтировал, что SMB совместно использует и выполнил эту команду.Мило!
– batfastad
10.01.2013, 12:55
-iname
хотя, поскольку это пропускало некоторые каталоги, содержащие.JPG/.JPEG файлы
– batfastad
10.01.2013, 13:05
-execdir
острота, к сожалению, только продолжает работать очень недавняя (и IIRC несколько более старых версий) GNU находят. Я думаю, что наиболее в настоящее время развертываемые системы имеют ошибочную версию, где это сообщает о каждом файле независимо. Попробуйте цикл удара (остерегайтесь этого, я не протестировал его).
– Gilles 'SO- stop being evil'
10.01.2013, 15:14