Вы можете делать то, что вам нужно, с помощью find
, который ищет все *.jpg
файлов, и простого сценария помощника , вызываемого опцией -exec
для find
для создания каталога jpg
и переместите все файлы .jpg
в новый каталог.
Вспомогательный скрипт просто получает абсолютное имя файла, используя readlink -f
и затем используя быстрое расширение параметра , чтобы обрезать последний компонент /...
из абсолютного имени файла, чтобы получить полный путь. Тогда это просто вопрос создания каталога jpg
в конце пути и перемещения файла в новый каталог.
Ваш вспомогательный скрипт (я назвал его helper.sh
) может быть:
#!/bin/sh
test -z "$1" && exit ## validate 1 argument given or exit
full=$(readlink -f "$1") ## get full filename
dir="${full%/*}" ## get full path
test "${full##*.}" = 'jpg' || exit ## test extension is jpg or exit
test -z "$dir" && dir="/" ## check if file was in / (root)
test -d "$dir/jpg" || mkdir -p "$dir/jpg" ## check/create jpg dir at end of path
mv "$full" "$dir/jpg" ## move file into new jpg dir
( примечание: после создания вспомогательного сценария убедитесь, что вы делаете его исполняемым) с chmod +x helper.sh
)
Дерево каталогов исходных проектов
$ tree Projects/
Projects/
├── Project_001
│ └── Image_001.jpg
├── Project_002
│ ├── Image_002.jpg
│ └── Image_003.jpg
└── Project_003
Ваша команда find
работает в каталоге Projects
, вызывая вспомогательный сценарий для каждый файл будет выглядеть следующим образом:
$ find Projects/ -type f -name "*jpg" -exec ./helper.sh '{}' \;
Дерево каталогов результирующих проектов
$ tree Projects/
Projects/
├── Project_001
│ └── jpg
│ └── Image_001.jpg
├── Project_002
│ └── jpg
│ ├── Image_002.jpg
│ └── Image_003.jpg
└── Project_003
Дайте мне знать, если у вас есть дополнительные вопросы.
Сохранение файлов уже в каталоге jpg
Для каждого дополнительного комментария, чтобы сохранить .jpg
файлы уже в каталоге jpg
в ваших проектах, все, что вам нужно сделать, это добавить одну дополнительную проверку. Если последний компонент пути уже jpg
, просто выйдите из помощника, например,
test "${dir##*/}" = 'jpg' && exit ## if already in jpg dir, exit
Показано в контексте в helper.sh
:
test -z "$1" && exit ## validate 1 argument given or exit
full=$(readlink -f "$1") ## get full filename
dir="${full%/*}" ## get full path (trim last /*)
test "${dir##*/}" = 'jpg' && exit ## if already in jpg dir, exit
test "${full##*.}" = 'jpg' || exit ## test extension is jpg or exit
...
Дерево каталогов оригинальных проектов (с существующим jpg)
$ tree Projects/
Projects/
├── Project_001
│ ├── Image_001.jpg
│ └── jpg
│ └── Image_000.jpg
├── Project_002
│ ├── Image_002.jpg
│ ├── Image_003.jpg
│ └── jpg
│ ├── Image_000.jpg
│ └── Image_001.jpg
└── Project_003
[1146 Дерево каталогов результирующих проектов
$ tree Projects/
Projects/
├── Project_001
│ └── jpg
│ ├── Image_000.jpg
│ └── Image_001.jpg
├── Project_002
│ └── jpg
│ ├── Image_000.jpg
│ ├── Image_001.jpg
│ ├── Image_002.jpg
│ └── Image_003.jpg
└── Project_003
UIImagePickerController пропускает память, как отмечено hereand после 7 или 8 причин использования Ваше приложение для катастрофического отказа. Необходимо создать одиночный элемент UIImagePickerController для срока действия приложения для предотвращения этого дефекта Apple.
Нет никакого приема к использованию UIImagePickerController - это использует набор памяти, и просто необходимо жить с этим. Выпуск его, когда Вы сделаны с ним, так эффективен, как это добирается.
Это относительно самого средства выбора изображения, все же. Другая часть вопроса - то, что Вы делаете с объектами UIImage, которые что это возвращает Вам. Это - большие объекты по стандартам iPhone, и Вы действительно не можете позволить себе сохранить многих из них в памяти. Если Вы отображаете изображение, это - жизнь, но изображения, которые не являются экранными, могут быть безопасно разгружены в файл через UIImageJPEGRepresentation () и writeToFile:atomically: NSDATA.
Если действительно необходимо отобразить несколько изображений, рассмотрите уменьшение масштаба их. Камера 1600x1200 является уже намного более крупной, чем экран, и с несколькими экранными изображениями это еще более чрезмерно. Масштабирование для понижения разрешений уменьшает требования к памяти существенно. Пример кода для того, чтобы сделать это не трудно найти - видят, что предварительный просмотр камеры UIImagePickerController является портретом в альбомном приложении, например.
Я знаю, что этот ответ после факта, но у меня был тот же тип проблемы, которая разрешила сам путем соединения против iPhone SDK 2.2 и больше.