Обычно вам нужно просто открыть Shotwell и перетащить в папку.
Если вам нужно, вы можете заставить оболочку создать список файлов CR2 и указать Shotwell открыть только эти файлы. Иногда это может быть тем, что вы хотите, но в этом случае это не дает того, что вам нужно, из-за поведения Shotwell - в некоторых других случаях, функции - автоматического показа вам других файлов изображений (всех типов), находящихся в те же папки, что и изображения, которые вы открыли.
Чтобы Shotwell знал только об интересующих вас изображениях, вы можете клонировать дерево каталогов в другом месте, копируя только .cr2
файлы и папки, которые их содержат, но не более того. Это может занять значительное дополнительное пространство, хотя. Таким образом, другой подход заключается в построении иерархии символических ссылок - когда вместо того, чтобы иметь новое дерево каталогов копий ваших исходных .cr2
файлов, у вас есть новое дерево каталогов символических ссылок на них. Это занимает гораздо меньше места.
Этот ответ охватывает все эти подходы.
Открытие папки изображений (включая подпапки) в Shotwell
Сам Shotwell дает вам два способа открыть целое дерево каталогов фотографий. Если это сработает для вас, вам не нужно будет делать что-то умное в командной строке или даже использовать его вообще. Если нет, вы можете сделать это в связи с другой техникой. (Например, если вы в конечном итоге создаете новый каталог символических ссылок или копий ваших .cr2
файлов, вы можете использовать один из этих способов, чтобы открыть его.)
Способ 1: просто откройте всю папку в Shotwell.
В Shotwell в меню « Файл» выберите « Импорт из папки» . Затем выберите папку, из которой вы хотите импортировать изображения. Это не ограничивается .cr2
файлами, но если вы открываете файлы из нескольких подпапок, содержащих .cr2
изображения, созданные с помощью цифровой камеры, то, скорее всего, это будут единственные имеющиеся файлы.
Посмотрите ответ Якоба, чтобы Показать все картинки рекурсивно (включая любые подпапки) для получения дополнительной информации.
Способ 2: перетащите папку в Shotwell.
В большинстве сред рабочего стола и файловых браузеров вы также можете открыть Shotwell и перетащить папку, содержащую ваши изображения, в окно Shotwell. Как и « Импорт из папки» , это еще один способ, которым Shotwell рекомендует открывать фотографии.
Когда вы перетаскиваете из окна браузера файлов или с рабочего стола в Shotwell, вы можете перетащить в определенную библиотеку. Или, если у вас не настроено несколько библиотек, вы можете просто перетащить в любом месте, и это работает. (Вам даже не нужно перетаскивать на левую панель.)
Этот метод очень удобен, и он так же эффективен, как и выбор папки вручную (в меню Файл > Импорт из папки , как описано выше). Когда вы открываете файлы или папки с помощью любого из этих методов , Shotwell дает вам возможность открывать фотографии, не копируя их в свою библиотеку.
Чтобы импортировать без копирования, нажмите « Импортировать на месте» вместо « Копировать фотографии» .
Запуск Shotwell со списком имен файлов изображений
Если по какой-либо причине вы хотите или должны сделать это, запустив команду в Терминале, вы можете запустить shotwell
команду и передать ей имя файла каждого изображения в качестве аргумента. Globstar позволяет легко:
shopt -s globstar
shotwell **/*.cr2
Это открывает .cr2
файлы, расположенные в любом месте в текущем каталоге. Он отличается от запуска Shotwell и последующего перетаскивания папки тем, что Shotwell будет пытаться импортировать только те файлы, имена которых вы им дадите. Однако, поскольку Shotwell часто показывает другие файлы изображений из тех же папок, что и файлы, которые вы сказали открыть, это может не подходить для ваших нужд. (И дальнейшая информация, которую вы дали о своей проблеме, предполагает, что это не так . См. Ниже альтернативу.)
Это не включает файлы или подпапки, чьи имена начинаются с.
. Однако, если у вас есть файлы CR2, имена которых начинаются с точки, то в большинстве случаев вам, скорее всего , не захочется открывать их в Shotwell. Если вы не умышленно назвали свои файлы или папки таким образом, точечный файл с расширением имени файла изображения или документа, скорее всего, будет файлом метаданных, а не фактическим изображением или документом. Например, macOS часто добавляет такие файлы (например, ._kittens.cr2
для реального изображения kittens.cr2
) при доступе к внешним носителям (включая флэш-накопители и цифровые камеры).
Если вы также хотите найти файлы, имена которых начинаются с .
или находятся в папках, имена которых начинаются с.
, то включите также dotglob. Вы можете сделать это с помощью shopt -s dotglob
или пропускания как globstar
и dotglob
к shopt
встроенным командам:
shopt -s globstar dotglob
По умолчанию глобусы чувствительны к регистру. Но вы можете захотеть , чтобы соответствовать имена файлов регистронезависимо , чтобы открывать файлы , оканчивающиеся на .cr2
, .Cr2
, .cR2
и .CR2
. Для этого либо:
Включить nocaseglob, запустив shopt -s
с nocaseglob
, либо сам по себе или с другими вариантами оболочки. Например, для запуска shotwell
по всем .cr2
файлам без .
учета регистра, включая -files и файлы в .
-directories:
shopt -s globstar dotglob nocaseglob
shotwell **/*.cr2
Или используйте .[cC][rR]2
вместо самого .cr2
шаблона. Например, это выполняется так же, как указано выше:
shopt -s globstar dotglob
shotwell **/*.[cC][rR]2
Обратите внимание, что чувствительность к регистру совершенно не зависит от того .
, совпадают ли файлы и папки. Вы можете удалить dotglob
из приведенных выше примеров, и они все еще могут быть без учета регистра.
Чтобы указать каталог, а не просто использовать текущий каталог, поместите его имя и знак /
перед **/*.cr2
глобусом. Например, если заменить приведенную shotwell
выше команду на эту, откроются все .cr2
файлы в Pictures
подкаталоге вашего домашнего каталога:
shotwell ~/Pictures/**/*.cr2
В отличие от первой команды, которая использует ваш текущий каталог, независимо от того, где вы выполняете эту команду, вы будете сообщать Shotwell об открытии тех же файлов.
тестирование
Если вам действительно нужно использовать терминал для этого, тогда я предполагаю, что он может быть частью чего-то более сложного. Если хотите, вы можете проверить такие команды перед тем, как запускать их, заменив shotwell
на printf '%s\n'
. Вместо того, чтобы передавать имена файлов в Shotwell, они перечисляют их по одному в строке. Например, на моей машине:
ek@Io:~$ printf '%s\n' ~/tmp/**/*.cr2
/home/ek/tmp/another image.cr2
/home/ek/tmp/image.cr2
/home/ek/tmp/some folder/image3.cr2
Отключение Globstar и других параметров оболочки
Параметр оболочки globstar включен, что и shopt -s globstar
сделала команда (см. Выше). Если он уже включен, вам не нужно использовать несколько команд. И вам нужно установить globstar только один раз для каждого экземпляра оболочки.
Вы можете выключить globstar, запустив:
shopt -u globstar
И вы можете проверить , включен или выключен globstar, запустив:
shopt globstar
Если вы используете globstar в сценарии, вам следует подумать о том, чтобы отключить его, если в последующем может присутствовать код из того же сценария, который не написан с учетом globstar. Например, запись, **
когда вы имеете в виду *
, обычно не вызывает проблем, когда globstar отключен, но с включенным globstar это может вызвать серьезные проблемы, заставляя команду воздействовать на гораздо больше файлов, чем кто-либо предполагал.
Точно так же, если вы использовали dotglob или nocaseglob и хотите отключить их, вы можете сделать это с помощью shopt -u dotglob
и shopt -u nocaseglob
, соответственно. Вы также можете передать несколько параметров оболочки, shopt -u
чтобы сбросить их одновременно. Например, чтобы выключить globstar,
dotglob
, и nocaseglob
:
shopt -u globstar dotglob nocaseglob
По сравнению с globstar, вы можете совершать меньше серьезных ошибок, потому что забыли, что оставили dotglob или nocaseglob. Но другие люди (включая людей, с которыми вы консультируетесь на таких сайтах, как Ask Ubuntu) обычно считают, что dotglob и nocaseglob отключены, когда они предлагают команды для использования, если вы не укажете им иначе.
Для получения дополнительной информации об этих параметрах оболочки, связанных с глобальными значениями (а также о глобальных параметрах в целом ), см. Справочное руководство bash . Все они рассматриваются в основном в 4.3.2 The Shopt Builtin . Для globstar см. Также 3.5.8.1 Сопоставление с образцом . Для dotglob, см. Также 3.5.8 Расширение имени файла .
Создание нового дерева каталогов
Поскольку в вашем случае вам, похоже, действительно нужен Shotwell, чтобы показывать только .cr2
файлы, у вас есть .cr2
файлы в тех же папках с .cr2
файлами, и просмотр изображений в Shotwell автоматически предлагает и эти файлы , похоже, вам понадобится папка, которая не содержит никаких других файлов изображений, кроме .cr2
файлов, которые вы пытаетесь открыть.
Перемещение файлов, как вы предложили , является одним из подходов, но вместо этого я рекомендую либо копировать файлы, либо, что лучше, делать символические ссылки на файлы (см. Также FOLDOC ), потому что:
- Если вы перемещаете файлы между устройствами, это все равно требует копирования, поэтому в этом случае перемещение происходит не быстрее.
- Если у вас есть свободное место, часто хорошей идеей будет хранить неизмененную папку со всем, с чего вы начали, до тех пор, пока вы не убедитесь, что то, что вы сделали, является правильным в соответствии с вашими потребностями. Очевидно, что это не всегда применимо или практично. Но в вашем случае эти файлы являются результатом операции восстановления данных. Может быть полезно вести легко просматриваемый отчет о том, что именно было восстановлено и откуда.
- Если вы решите создать символические ссылки, количество потребляемого дополнительного пространства будет крайне небольшим . (Однако, если целевой диск полностью заполнен , вам все равно потребуется освободить место на нем - или использовать другой целевой диск - для создания символических ссылок.)
Есть и другое решение для вас тоже. Создаете ли вы все новые записи (будь то копии или символические ссылки) в одном каталоге, сглаживая иерархию файлов? Или вы создаете каталоги в месте назначения, соответствующие каждому из каталогов в источнике, которые содержат хотя бы один .cr2
файл?
Выравнивание файловой иерархии позволяет легко просматривать все файлы одновременно. В частности, легко увидеть имена и размеры файлов одновременно, а также выбрать любую комбинацию файлов в графическом браузере файлов.
Но он также теряет информацию о том, в каких папках они находились, что может оказаться полезным (хотя вы можете вернуться в исходную папку и искать их там, если не перемещаете файлы).
Однако большая проблема с выравниванием файловой иерархии заключается в том, что происходит, если у вас есть два или более файлов с одинаковыми именами в разных местах . Если вы выровняете файловую иерархию, то, в зависимости от того, как вы это сделаете, копирование (или связывание) всех, кроме первого, будет невозможно, или вы получите сообщение об ошибке или предупреждение, или все, кроме последней копии (или ссылки), будут быть перезаписаны .
Это еще одна причина, по которой я рекомендую копировать или создавать символические ссылки, а не перемещать файлы. Если вы «успешно» переместите несколько файлов в один файл, вы потеряете все, кроме последнего!
Из-за недостатков, связанных с сведением всего в один каталог без подкаталогов, подходы, которые я здесь использую, создают новое дерево каталогов в месте назначения.
Способ 1: копирование
Сначала я покажу это, потому что это немного проще, но я предлагаю вместо этого создать символические ссылки («Способ 2»), особенно если на целевом диске может не хватить места для хранения всех файлов. «Способ 2», который немного сложнее, гораздо более детален, потому что кажется, что ресурсов этой методики меньше, как я ожидаю, что большинство людей в этой ситуации предпочтут, и информация, которая применима к обоим методам. - основной совет о том, как избежать пробелов в путях, - даётся там, а не здесь.
Когда вам нужно скопировать дерево каталогов и вам нужно настроить операцию копирования, вы обычно должны использовать rsync
вместо cp
. Это один из таких случаев.
Заменив src
путь к каталогу верхнего уровня, содержащему все ваши файлы CR2, и заменив dest
именем каталога, который вы хотите создать, который будет содержать иерархию символических ссылок на файлы CR2, запустите:
rsync -rl --prune-empty-dirs --include='*/' --include='*.cr2' --exclude='*' src/ dest
Не забывайте /
после имени исходного каталога, если вы не хотите, чтобы внутри создавался дополнительный каталог верхнего уровняdest
. То есть, если вы пропустите трейлинг /
, то rsync
создадите каталог назначения для вас, внутри dest
. Например, предположим, что src
это относительный путь, содержащий нет /
. Затем:
- С помощью
src/
вашей rsync
команды вы получите символическую ссылку dest/foo/bar.cr2
на файл src/foo/bar.cr2
.
- С помощью
src
вашей rsync
команды вы получите символическую ссылку на файл .dest/src/foo/bar.cr2
src/foo/bar.cr2
Поскольку каталог верхнего уровня, в котором будут размещаться символические ссылки, может быть непонятным, так как он имеет то же имя, что и каталог верхнего уровня, содержащий .cr2
файлы, на которые будут ссылаться символические ссылки, я рекомендую указывать /
в конце пункта назначения имя каталога в вашей rsync
команде. (И, для исходного каталога, дайте ему каталог, который пуст, не существует или иным образом предназначен для этой цели. В противном случае вы будете загромождать какую-то другую папку.)
Как это обычно бывает , когда вы передаете имя файла или каталога в программе командной строки или сценария, если пункт назначения или исходные пути каталога содержит пробелы (или символы , обработанные специально оболочкой, как \
, $
, '
, и различные другие знаки препинания), тогда вам придется их цитировать . Я подробно описал, как это сделать, для наиболее распространенного случая пробелов, в «Способе 2» - совет по цитированию в этом разделе также применим и здесь. Однако, если вы не знаете, как указать имя папки, вы можете сделать это за Ubuntu, просто перетащив папку в Temrminal; его полный путь будет вставлен с правильной цитатой .
После копирования только .cr2
файлов и папок, которые их содержат, вы можете открыть целевую папку в Shotwell. (См. «Открытие папки изображений (включая подпапки) в Shotwell» выше.) Однако перед запуском rsync
я рекомендую вам решить, хотите ли вы пропустить записи, которые начинаются с, .
и хотите ли вы включить записи с суффиксами варианта варианта. Если это так, вам придется запустить немного другую rsync
команду.
Настройка обработки пунктирных записей и чувствительности к регистру
Вы можете использовать другую rsync
команду, чтобы изменить, пропускаются ли файлы и каталоги, начинающиеся с точки, и хотите ли вы, чтобы при сопоставлении суффикса учитывалась регистр символов .cr2
.
Команда выше включает в себя каталоги и файлы, имена которых начинаются с .
. Чтобы исключить такие файлы и каталоги, ставьте --exclude='.*/' --exclude='.*'
перед всеми остальными --include
s и --exclude
s. То есть используйте эту rsync
команду вместо этого (с соответствующими заменами src
и dest
, конечно же):
rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.cr2' --exclude='*' src/ dest
Эти rsync
команды , показанные до сих пор были чувствительны к регистру и не будет копировать файлы , которые заканчиваются .CR2
, .Cr2
или .cR2
вместо .cr2
. Если вы хотите, чтобы такие файлы были скопированы, то вам нужно будет учесть это, используя --include
шаблон *.[cC][rR]2
вместо *.cr2
.
Эта третья команда не учитывает регистр и (как и первая команда) не пропускает файлы и каталоги, имена которых начинаются с .
:
rsync -rl --prune-empty-dirs --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest
Если вы подходите к копированию файлов rsync
и не уверены, какую из этих команд вы хотите, я советую использовать эту, если вы хотите убедиться, что ничего не пропустили. Однако вы должны знать, что точечные файлы могут содержать метаданные, а точечные файлы, названные как изображения, могут на самом деле не быть изображениями. См. Обсуждение файлов точек в разделе «Запуск Shotwell со списком имен файлов изображений» выше, а также о файлах точек и чувствительности к регистру в «Пути 2» ниже.
Эта четвертая команда не чувствительны к регистру и (как второй команды) делает Пропускать файлы и директории, имена которых начинаются с .
:
rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest
Способ 2: создание символических ссылок
Это то, что я рекомендую вам сделать, хотя путь 1 вполне подойдет, если у вас достаточно места на диске назначения. Вам не нужно читать Способ 1, чтобы использовать это.
Метод, представленный здесь, создает список .cr2
файлов и проходит по списку, создавая целевые каталоги по мере необходимости и наполняя их символическими ссылками на каждый .cr2
файл.
Это достаточно сложно, поэтому я предлагаю поместить его в скрипт, а не просто вводить его в интерактивном режиме. Вы можете поместить скрипт в любое удобное для вас место, но для удобства я покажу, как это сделать с помощью скрипта, размещенного непосредственно в вашей домашней папке.
Напишите (или вставьте) скрипт.
Создайте текстовый файл make-symlinks
в вашей домашней папке. Расширение файла не требуется.
Вы можете сделать это с помощью любого текстового редактора, такого как Vim, Nano, Gedit или Leafpad. Не используйте текстовый процессор, такой как LibreOffice Writer. (Вы можете даже сделать это, запустив cat > ~/make-symlinks
, вставив содержимое файла и нажав Ctrl+ Dна новой строке, если хотите.)
Если вы называете сценарий как-то иначе make-symlinks
, обязательно используйте это имя при запуске команд, которые используют сценарий позже.
#!/bin/bash
shopt -s globstar dotglob nocaseglob
for f in **/*.cr2; do
mkdir -p "$1/$(dirname "$f")"
ln -s "$PWD/$f" "$1/$f"
done
Поместите это в файл и сохраните файл. В этом сценарии используется globstar, функция Bash, описанная выше в разделе «Запуск Shotwell со списком имен файлов изображений» .
Вы можете изменить способ обработки записей с точками и чувствительность к регистру.
В зависимости от ваших потребностей, вы можете внести некоторые изменения:
Если вы не хотите включать .cr2
файлы, имена которых начинаются с .
или находятся в каталогах, имена которых начинаются с .
, удалите dotglob
из shopt
строки.
Файлы и каталоги, названия которых начинаются с .
, часто используются для метаданных (см. Выше раздел «Запуск Shotwell со списком имен файлов изображений» ). С другой стороны, если вы хотите убедиться, что у вас есть все, или если что-то необъяснимо не хватает, что вы уверены, что есть, то следует сохранить dotglob
.
Если вы хотите включить только те файлы , которые заканчиваются точно , .cr2
но не варианты случая ( .CR2
, .Cr2
и .cR2
), то вы должны удалить nocaseglob
. Поскольку ваша ситуация связана с восстановлением данных, а Shotwell не покажет вам ни одного файла, который вы пропустили при открытии каталога символических ссылок - в этом и заключается смысл этого метода - вы, вероятно, захотите сохранить nocaseglob
.
Сделайте это исполняемым.
Запустите эту команду, чтобы отметить исполняемый файл скрипта:
chmod +x ~/make-symlinks
Запустите его в источнике и передайте пункт назначения в качестве аргумента.
Затем измените каталог на исходный каталог, т. Е. Папку верхнего уровня, содержащую изображения. Например, если они находятся в Pictures
подкаталоге вашего домашнего каталога, вы должны выполнить:
cd ~/Pictures
Здесь вы будете запускать скрипт. Передайте каталог назначения в сценарий в качестве аргумента командной строки.
Например, если вы хотите, cr2s
чтобы на рабочем столе создавался каталог, содержащий символические ссылки, выполните:
~/make-symlinks ~/Desktop/cr2s
Или, если вы просто хотите этот каталог прямо в вашей домашней папке:
~/make-symlinks ~/cr2s
Или, если у вас смонтирован диск /media/you/MyDrive
и вы хотите создать на нем папку links
с символическими ссылками:
~/make-symlinks /media/you/MyDrive/links
Но если диск /media/you/My Drive
(с пробелом), то вы должны использовать цитату. Любая из этих работ (используйте только одну, не запускайте их все):
~/make-symlinks '/media/you/My Drive/links'
~/make-symlinks /media/you/'My Drive'/links
~/make-symlinks /media/you/My\ Drive/links
Но если вы используете ~
для своего домашнего каталога, не цитируйте это:
~/make-symlinks ~/'Two Words' # good
~/make-symlinks ~/Two\ Words # good
~/make-symlinks '~/Two Words' # BAD, because ~ doesn't get expanded
make-symlinks
создает каталог назначения для вас, если он еще не существует, так же, как он создает подкаталоги в нем. Тем не менее, он все еще работает, если пункт назначения уже существует.
Вы даже можете запустить его несколько раз и передать один и тот же каталог назначения (например, если вы прервали его с помощью Ctrl+ C), хотя вы получите failed to create symbolic link
ошибки для уже существующих символических ссылок, что может ввести в заблуждение.
Вы, вероятно, не хотите передавать имя каталога, который уже существует и содержит несвязанные файлы (например, ваш домашний каталог) make-symlinks
. Если вы это сделаете, вы можете ожидать, что в нем будет создана целая куча символических ссылок и подпапок. Вы, вероятно, хотите использовать новый каталог - или тот, который еще не существует - для make-symlinks
.
Импортируйте только что созданное дерево символических ссылок в Shotwell.
После запуска make-symlinks
просто импортируйте каталог, который вы ему передали, в Shotwell, используя любой из методов, приведенных в первой части этого ответа ( «Открытие папки изображений (включая подпапки) в Shotwell» ). Например, вы можете открыть Shotwell и перетащить папку в.
Поскольку все записи в папке являются символическими ссылками на .cr2
файлы или каталоги, которые их содержат, без каких-либо других типов файлов, Shotwell не должен видеть никаких других файлов.