Что-то вроде
shotwell *.cr2 ./
Это не работает, но в основном я хочу использовать shotwell для открытия всех файлов, которые заканчиваются .cr2
в текущем каталоге и в нем (включая подпапки)
Суть в том, что мне не хватает фотографий, которые я сделал на своей камере, которые я с тех пор удалил со своей карты памяти.
Для них есть миниатюры в «отсутствующих изображениях» Шотвелла, но я не могу их найти. Поэтому я решил бежать photorec
и попытаться найти их. В результате photorec дал мне кучу папок и файлов, достаточно, чтобы он заполнил мой жесткий диск. Вместо того, чтобы просеивать все файлы по одному, я решил искать файлы .cr2 на моем жестком диске, избегая при этом определенной папки, Photogs
которая, как мне известно, не имеет их, потому что они не были частью photorec
дампа данных.
источник
Ответы:
Обычно вам нужно просто открыть 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 позволяет легко:Это открывает
.cr2
файлы, расположенные в любом месте в текущем каталоге. Он отличается от запуска Shotwell и последующего перетаскивания папки тем, что Shotwell будет пытаться импортировать только те файлы, имена которых вы им дадите. Однако, поскольку Shotwell часто показывает другие файлы изображений из тех же папок, что и файлы, которые вы сказали открыть, это может не подходить для ваших нужд. (И дальнейшая информация, которую вы дали о своей проблеме, предполагает, что это не так . См. Ниже альтернативу.)Это не включает файлы или подпапки, чьи имена начинаются с
.
. Однако, если у вас есть файлы CR2, имена которых начинаются с точки, то в большинстве случаев вам, скорее всего , не захочется открывать их в Shotwell. Если вы не умышленно назвали свои файлы или папки таким образом, точечный файл с расширением имени файла изображения или документа, скорее всего, будет файлом метаданных, а не фактическим изображением или документом. Например, macOS часто добавляет такие файлы (например,._kittens.cr2
для реального изображенияkittens.cr2
) при доступе к внешним носителям (включая флэш-накопители и цифровые камеры).Если вы также хотите найти файлы, имена которых начинаются с
.
или находятся в папках, имена которых начинаются с.
, то включите также dotglob. Вы можете сделать это с помощьюshopt -s dotglob
или пропускания какglobstar
иdotglob
кshopt
встроенным командам:По умолчанию глобусы чувствительны к регистру. Но вы можете захотеть , чтобы соответствовать имена файлов регистронезависимо , чтобы открывать файлы , оканчивающиеся на
.cr2
,.Cr2
,.cR2
и.CR2
. Для этого либо:Включить nocaseglob, запустив
shopt -s
сnocaseglob
, либо сам по себе или с другими вариантами оболочки. Например, для запускаshotwell
по всем.cr2
файлам без.
учета регистра, включая -files и файлы в.
-directories:Или используйте
.[cC][rR]2
вместо самого.cr2
шаблона. Например, это выполняется так же, как указано выше:Обратите внимание, что чувствительность к регистру совершенно не зависит от того
.
, совпадают ли файлы и папки. Вы можете удалитьdotglob
из приведенных выше примеров, и они все еще могут быть без учета регистра.Чтобы указать каталог, а не просто использовать текущий каталог, поместите его имя и знак
/
перед**/*.cr2
глобусом. Например, если заменить приведеннуюshotwell
выше команду на эту, откроются все.cr2
файлы вPictures
подкаталоге вашего домашнего каталога:В отличие от первой команды, которая использует ваш текущий каталог, независимо от того, где вы выполняете эту команду, вы будете сообщать Shotwell об открытии тех же файлов.
тестирование
Если вам действительно нужно использовать терминал для этого, тогда я предполагаю, что он может быть частью чего-то более сложного. Если хотите, вы можете проверить такие команды перед тем, как запускать их, заменив
shotwell
наprintf '%s\n'
. Вместо того, чтобы передавать имена файлов в Shotwell, они перечисляют их по одному в строке. Например, на моей машине:Отключение Globstar и других параметров оболочки
Параметр оболочки globstar включен, что и
shopt -s globstar
сделала команда (см. Выше). Если он уже включен, вам не нужно использовать несколько команд. И вам нужно установить globstar только один раз для каждого экземпляра оболочки.Вы можете выключить globstar, запустив:
И вы можете проверить , включен или выключен globstar, запустив:
Если вы используете globstar в сценарии, вам следует подумать о том, чтобы отключить его, если в последующем может присутствовать код из того же сценария, который не написан с учетом globstar. Например, запись,
**
когда вы имеете в виду*
, обычно не вызывает проблем, когда globstar отключен, но с включенным globstar это может вызвать серьезные проблемы, заставляя команду воздействовать на гораздо больше файлов, чем кто-либо предполагал.Точно так же, если вы использовали dotglob или nocaseglob и хотите отключить их, вы можете сделать это с помощью
shopt -u dotglob
иshopt -u 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, запустите:Не забывайте
/
после имени исходного каталога, если вы не хотите, чтобы внутри создавался дополнительный каталог верхнего уровня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
команды , показанные до сих пор были чувствительны к регистру и не будет копировать файлы , которые заканчиваются.CR2
,.Cr2
или.cR2
вместо.cr2
. Если вы хотите, чтобы такие файлы были скопированы, то вам нужно будет учесть это, используя--include
шаблон*.[cC][rR]2
вместо*.cr2
.Эта третья команда не учитывает регистр и (как и первая команда) не пропускает файлы и каталоги, имена которых начинаются с
.
:Если вы подходите к копированию файлов
rsync
и не уверены, какую из этих команд вы хотите, я советую использовать эту, если вы хотите убедиться, что ничего не пропустили. Однако вы должны знать, что точечные файлы могут содержать метаданные, а точечные файлы, названные как изображения, могут на самом деле не быть изображениями. См. Обсуждение файлов точек в разделе «Запуск Shotwell со списком имен файлов изображений» выше, а также о файлах точек и чувствительности к регистру в «Пути 2» ниже.Эта четвертая команда не чувствительны к регистру и (как второй команды) делает Пропускать файлы и директории, имена которых начинаются с
.
:Способ 2: создание символических ссылок
Это то, что я рекомендую вам сделать, хотя путь 1 вполне подойдет, если у вас достаточно места на диске назначения. Вам не нужно читать Способ 1, чтобы использовать это.
Метод, представленный здесь, создает список
.cr2
файлов и проходит по списку, создавая целевые каталоги по мере необходимости и наполняя их символическими ссылками на каждый.cr2
файл.Это достаточно сложно, поэтому я предлагаю поместить его в скрипт, а не просто вводить его в интерактивном режиме. Вы можете поместить скрипт в любое удобное для вас место, но для удобства я покажу, как это сделать с помощью скрипта, размещенного непосредственно в вашей домашней папке.
Напишите (или вставьте) скрипт.
Создайте текстовый файл
make-symlinks
в вашей домашней папке. Расширение файла не требуется.Вы можете сделать это с помощью любого текстового редактора, такого как Vim, Nano, Gedit или Leafpad. Не используйте текстовый процессор, такой как LibreOffice Writer. (Вы можете даже сделать это, запустив
cat > ~/make-symlinks
, вставив содержимое файла и нажав Ctrl+ Dна новой строке, если хотите.)Если вы называете сценарий как-то иначе
make-symlinks
, обязательно используйте это имя при запуске команд, которые используют сценарий позже.Поместите это в файл и сохраните файл. В этом сценарии используется globstar, функция Bash, описанная выше в разделе «Запуск Shotwell со списком имен файлов изображений» .
Вы можете изменить способ обработки записей с точками и чувствительность к регистру.
В зависимости от ваших потребностей, вы можете внести некоторые изменения:
Если вы не хотите включать
.cr2
файлы, имена которых начинаются с.
или находятся в каталогах, имена которых начинаются с.
, удалитеdotglob
изshopt
строки.Файлы и каталоги, названия которых начинаются с
.
, часто используются для метаданных (см. Выше раздел «Запуск Shotwell со списком имен файлов изображений» ). С другой стороны, если вы хотите убедиться, что у вас есть все, или если что-то необъяснимо не хватает, что вы уверены, что есть, то следует сохранитьdotglob
.Если вы хотите включить только те файлы , которые заканчиваются точно ,
.cr2
но не варианты случая (.CR2
,.Cr2
и.cR2
), то вы должны удалитьnocaseglob
. Поскольку ваша ситуация связана с восстановлением данных, а Shotwell не покажет вам ни одного файла, который вы пропустили при открытии каталога символических ссылок - в этом и заключается смысл этого метода - вы, вероятно, захотите сохранитьnocaseglob
.Сделайте это исполняемым.
Запустите эту команду, чтобы отметить исполняемый файл скрипта:
Запустите его в источнике и передайте пункт назначения в качестве аргумента.
Затем измените каталог на исходный каталог, т. Е. Папку верхнего уровня, содержащую изображения. Например, если они находятся в
Pictures
подкаталоге вашего домашнего каталога, вы должны выполнить:Здесь вы будете запускать скрипт. Передайте каталог назначения в сценарий в качестве аргумента командной строки.
Например, если вы хотите,
cr2s
чтобы на рабочем столе создавался каталог, содержащий символические ссылки, выполните:Или, если вы просто хотите этот каталог прямо в вашей домашней папке:
Или, если у вас смонтирован диск
/media/you/MyDrive
и вы хотите создать на нем папкуlinks
с символическими ссылками:Но если диск
/media/you/My Drive
(с пробелом), то вы должны использовать цитату. Любая из этих работ (используйте только одну, не запускайте их все):Но если вы используете
~
для своего домашнего каталога, не цитируйте это:make-symlinks
создает каталог назначения для вас, если он еще не существует, так же, как он создает подкаталоги в нем. Тем не менее, он все еще работает, если пункт назначения уже существует.Вы даже можете запустить его несколько раз и передать один и тот же каталог назначения (например, если вы прервали его с помощью Ctrl+ C), хотя вы получите
failed to create symbolic link
ошибки для уже существующих символических ссылок, что может ввести в заблуждение.Вы, вероятно, не хотите передавать имя каталога, который уже существует и содержит несвязанные файлы (например, ваш домашний каталог)
make-symlinks
. Если вы это сделаете, вы можете ожидать, что в нем будет создана целая куча символических ссылок и подпапок. Вы, вероятно, хотите использовать новый каталог - или тот, который еще не существует - дляmake-symlinks
.Импортируйте только что созданное дерево символических ссылок в Shotwell.
После запуска
make-symlinks
просто импортируйте каталог, который вы ему передали, в Shotwell, используя любой из методов, приведенных в первой части этого ответа ( «Открытие папки изображений (включая подпапки) в Shotwell» ). Например, вы можете открыть Shotwell и перетащить папку в.Поскольку все записи в папке являются символическими ссылками на
.cr2
файлы или каталоги, которые их содержат, без каких-либо других типов файлов, Shotwell не должен видеть никаких других файлов.источник
Shotwell будет циклически перебирать все изображения, найденные в каждом каталоге, где изображение открыто, поэтому использование,
find -name '*.cr2' -exec shotwell '{}' +
как я изначально предложил, не очень помогает. Поскольку настройки Shotwell довольно ограничены, я могу думать только о том, чтобы открыть только те файлы, которые вам нужны, - переместить файлы в новый каталог самостоятельно.Вы можете использовать
find
для этого:Замените
cp
на,mv
если вы хотите избежать дублирования файлов.Ноты:
mkdir ~/cr2files
создайте новый каталог в вашем домашнем каталогеfind
искать рекурсивно из текущего каталога вниз по дереву-type f
искать только файлы-iname
поиск файлов по имени, без учета регистра'*.cr2'
имена, заканчивающиеся на.cr2
- используйте кавычки, чтобы остановить оболочку, расширяющую глобус, прежде чем она будет переданаfind
-not -path './dir/*'
исключит содержимое каталогаdir
из результатов{}
представляет пути найденных файлов--
послеcp
означает запретитьcp
прием дополнительных опций, что позволяет избежать имен файлов, начинающихся с-
проблем.Затем вы можете открыть любой файл в новом каталоге с помощью Shotwell и просмотреть их все
источник
Вариант 1. Использование,
xargs
когда имена файлов содержат пробелыКак указывалось в комментариях ниже, использование
back ticks
(Вариант 3 ниже) будет прерываться, когда имена файлов содержат пробелы. Более безопасный метод использованияfind
команды и передачи вывода вshotwell
использованиеxargs
опции выглядит следующим образом:-print0
Флаг указывает найти использовать\0
(нулевой символ) разделители между именами файлов и-0
флаг указываетxargs
ожидать эти\0
разделители.Благодарим за отличные ответы, найденные здесь ( Как передать список файлов, возвращаемых командой find ) в Stack Overflow.
Вариант 2 - Использование,
-exec
когда имена файлов содержат пробелыКак указывает комментарий ниже,
-exec
опция также поддерживает имена файлов, содержащие пробелы. Другие комментарии ниже указывают на разрывы, когда количество файлов превышает. Это будет выглядеть так:Вариант 3 - когда имена файлов не имеют пробелов
В старые времена, когда имена файлов имели пробелы и становились длиной 256 символов, эта опция работала нормально. Вы найдете эту опцию упомянутой на многих других сайтах, но вы не должны использовать эту опцию . Раньше использование
find
команды и передача выводаshotwell
было самым простым способом:Это запускает
find
из текущего каталога и включает в себя все подкаталоги:$(...)
bash..
даетfind
начальную точку, которая является текущим каталогом. Вы могли бы передать/home/$USER/Pictures
или что-то еще вместо.
.-name
сообщает find для поиска имен файлов (не каталогов).shotwell
. то есть вы можете использовать его дляcat
,head
,tail
и большинство других популярных команд Linux.источник
xargs
и использовать-0
все имена файлов, используя NULL-строку в качестве разделителя$(
)
синтаксис подстановки команд синтаксису подстановки команд backtick, это не относится к этой проблеме - они оба терпят неудачу абсолютно одинаково. @ Serg Я предлагаю опубликовать новый ответ о том, как это сделатьxargs
. (Вставка подстановки"
"
также не сработает: всеfind
результаты будут переданы как один аргумент.)xargs
вариантStack Overflow
при написании этого ответа. Я расширю с этой опцией тоже. К сожалению, сегодня утром мне пришлось загружаться с Windows 8, чтобы исправить поврежденныйNTFS
раздел, поэтому тестирование оказалось проблематичным. Я обновлю ответ позже, хотя. Спасибо за указание на это :)-exec
?-exec
опцию :)Я не знал, что Shotwell даже открыл сырые файлы. Я уверен, что вы можете получить больше пробега с digikam или darktable. Digikam поставляется с некоторыми компонентами Kde и является довольно хорошим менеджером фотографий. Darktable поставляется с очень хорошими неразрушающими возможностями редактирования.
источник
.cr2
файлов в папке? Если это так, то это может быть ценным, так как оригинальный плакат имел проблемы с получением Шотуэлл , чтобы показать только те.cr2
файлы. Хотя я добавил дополнительные подходы к своему ответу, чтобы сделать возможным использование Shotwell для просмотра только этих файлов, а не других, я довольно сильно подозреваю, что Shotwell не лучший инструмент для этого.