Хотите верьте, хотите нет, можно сделать это с find
и du
. Я использовал подобную технику, что я описал на своем блоге некоторое время движение. Та статья названа: [острота]: Вычисление Использования дискового пространства для Списка Файлов Используя du в соответствии с Linux.
Суть того сообщения является командой, такой как это:
$ find -maxdepth 2 -type f | tr '\n' '\0' | du -ch --files0-from=-
Это перечислит размер всех файлов наряду с общим итогом.
$ find -maxdepth 2 -type f | tr '\n' '\0' | du -ch --files0-from=- | tail -10
0 ./92086/2.txt
0 ./92086/5.txt
0 ./92086/14.txt
0 ./92086/19.txt
0 ./92086/18.txt
0 ./92086/17.txt
4.0K ./load.bash
4.0K ./100855/plain.txt
4.0K ./100855/tst_ccmds.bash
21M total
Примечание: Это решение требует этого du
поддерживайте --files0-from=
переключатель, который является переключателем GNU к моему знанию.
выборка из du страницы справочника
--files0-from=F
summarize disk usage of the NUL-terminated file names specified in
file F; If F is - then read names from standard input
Также этот метод страдает от неспособности иметь дело со специальными символами в именах файлов, таких как пробелы и нераспечатки.
du: cannot access `./101415/fileD': No such file or directory
du: cannot access `E': No such file or directory
С ними можно было иметь дело путем представления больше tr .. ..
команды для замены ими с альтернативными символами. Однако существует лучший путь, если у Вас есть доступ к GNU find
.
Если Ваша версия find
предложения --print0
переключитесь затем, можно использовать это колдовство, которое имеет дело с файлами, которые имеют пробелы и/или специальные символы, которые не являются печатаемыми.
$ find -maxdepth 2 -type f -print0 | du -ch --files0-from=- | tail -10
0 ./92086/2.txt
0 ./92086/5.txt
0 ./92086/14.txt
0 ./92086/19.txt
0 ./92086/18.txt
0 ./92086/17.txt
4.0K ./load.bash
4.0K ./100855/plain.txt
4.0K ./100855/tst_ccmds.bash
21M total
Вероятно, лучшим инструментом для работы с изображениями будет ImageMagick. Если вы посмотрите документацию, там есть обширные примеры, показывающие, как использовать функцию -distort
, которую, как мне кажется, вы ищете.
До После
Командная строка для выполнения преобразования:
$ convert checks.png -filter point
-virtual-pixel tile -mattecolor DodgerBlue
-distort Perspective '0,0 20,60 90,0 70,63 0,90 5,83 90,90 85,88'
horizon_tile_point.png
Есть 2 другие методы выполнения выборки, чтобы изображение выглядело лучше. В частности, "суперсэмплинг сетки" и "повторная выборка эллиптической взвешенной области (EWA)". Последний вариант используется по умолчанию.
Есть 2 ресурса для понимания того, как сгенерировать серию координат для преобразовать
. Первый - это тот, который я дал выше. Второй - это SO Q&A под названием: Понимание искажения перспективной проекции ImageMagick , в частности, @ KurtPfeifle, ответ .
Координаты следующие:
Sx1,Sy1 Dx1,Dy1 Sx2,Sy2 Dx2,Dy2 Sx3,Sy3 Dx3,Dy3 ... Sxn,Syn Dxn,Dyn