Я хочу, чтобы shotwell открыл все файлы .cr2 в папке и во всех ее подпапках. Какую командную строку использовать?

9

Что-то вроде

shotwell *.cr2 ./

Это не работает, но в основном я хочу использовать shotwell для открытия всех файлов, которые заканчиваются .cr2в текущем каталоге и в нем (включая подпапки)

Суть в том, что мне не хватает фотографий, которые я сделал на своей камере, которые я с тех пор удалил со своей карты памяти.

Для них есть миниатюры в «отсутствующих изображениях» Шотвелла, но я не могу их найти. Поэтому я решил бежать photorecи попытаться найти их. В результате photorec дал мне кучу папок и файлов, достаточно, чтобы он заполнил мой жесткий диск. Вместо того, чтобы просеивать все файлы по одному, я решил искать файлы .cr2 на моем жестком диске, избегая при этом определенной папки, Photogsкоторая, как мне известно, не имеет их, потому что они не были частью photorecдампа данных.

user285884
источник
@EliahKagan см. Комментарии (которые продолжались в чате!) Для подробностей здесь . Я не уверен, нужно ли и как редактировать вопрос, поэтому, пожалуйста, сообщите, учитывая, что вы создали такой красивый ответ
Zanna
@ user285884 Последние изменения в моем ответе включают подробную процедуру построения дерева символических ссылок только на файлы .cr2, которые затем можно открыть в Shotwell (и некоторых других методах). Это должно решить проблему просмотра дополнительных файлов, отличных от .cr2 в Shotwell, а также проблему нехватки места на целевом устройстве для перемещения или копирования файлов. Я не был уверен, из соответствующего чата , если вы уже решили это.
Элия ​​Каган

Ответы:

6

Обычно вам нужно просто открыть Shotwell и перетащить в папку.

Если вам нужно, вы можете заставить оболочку создать список файлов CR2 и указать Shotwell открыть только эти файлы. Иногда это может быть тем, что вы хотите, но в этом случае это не дает того, что вам нужно, из-за поведения Shotwell - в некоторых других случаях, функции - автоматического показа вам других файлов изображений (всех типов), находящихся в те же папки, что и изображения, которые вы открыли.

Чтобы Shotwell знал только об интересующих вас изображениях, вы можете клонировать дерево каталогов в другом месте, копируя только .cr2файлы и папки, которые их содержат, но не более того. Это может занять значительное дополнительное пространство, хотя. Таким образом, другой подход заключается в построении иерархии символических ссылок - когда вместо того, чтобы иметь новое дерево каталогов копий ваших исходных .cr2файлов, у вас есть новое дерево каталогов символических ссылок на них. Это занимает гораздо меньше места.

Этот ответ охватывает все эти подходы.

Открытие папки изображений (включая подпапки) в Shotwell

Сам Shotwell дает вам два способа открыть целое дерево каталогов фотографий. Если это сработает для вас, вам не нужно будет делать что-то умное в командной строке или даже использовать его вообще. Если нет, вы можете сделать это в связи с другой техникой. (Например, если вы в конечном итоге создаете новый каталог символических ссылок или копий ваших .cr2файлов, вы можете использовать один из этих способов, чтобы открыть его.)

Способ 1: просто откройте всю папку в Shotwell.

В Shotwell в меню « Файл» выберите « Импорт из папки» . Затем выберите папку, из которой вы хотите импортировать изображения. Это не ограничивается .cr2файлами, но если вы открываете файлы из нескольких подпапок, содержащих .cr2изображения, созданные с помощью цифровой камеры, то, скорее всего, это будут единственные имеющиеся файлы.

Снимок экрана: пункт меню "Импорт из папки" в меню "Файл" Shotwell.

Посмотрите ответ Якоба, чтобы Показать все картинки рекурсивно (включая любые подпапки) для получения дополнительной информации.

Способ 2: перетащите папку в Shotwell.

В большинстве сред рабочего стола и файловых браузеров вы также можете открыть Shotwell и перетащить папку, содержащую ваши изображения, в окно Shotwell. Как и « Импорт из папки» , это еще один способ, которым 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.cr2src/foo/bar.cr2

Поскольку каталог верхнего уровня, в котором будут размещаться символические ссылки, может быть непонятным, так как он имеет то же имя, что и каталог верхнего уровня, содержащий .cr2файлы, на которые будут ссылаться символические ссылки, я рекомендую указывать /в конце пункта назначения имя каталога в вашей rsyncкоманде. (И, для исходного каталога, дайте ему каталог, который пуст, не существует или иным образом предназначен для этой цели. В противном случае вы будете загромождать какую-то другую папку.)

Как это обычно бывает , когда вы передаете имя файла или каталога в программе командной строки или сценария, если пункт назначения или исходные пути каталога содержит пробелы (или символы , обработанные специально оболочкой, как \, $, ', и различные другие знаки препинания), тогда вам придется их цитировать . Я подробно описал, как это сделать, для наиболее распространенного случая пробелов, в «Способе 2» - совет по цитированию в этом разделе также применим и здесь. Однако, если вы не знаете, как указать имя папки, вы можете сделать это за Ubuntu, просто перетащив папку в Temrminal; его полный путь будет вставлен с правильной цитатой .

После копирования только .cr2файлов и папок, которые их содержат, вы можете открыть целевую папку в Shotwell. (См. «Открытие папки изображений (включая подпапки) в Shotwell» выше.) Однако перед запуском rsyncя рекомендую вам решить, хотите ли вы пропустить записи, которые начинаются с, .и хотите ли вы включить записи с суффиксами варианта варианта. Если это так, вам придется запустить немного другую rsyncкоманду.

Настройка обработки пунктирных записей и чувствительности к регистру

Вы можете использовать другую rsyncкоманду, чтобы изменить, пропускаются ли файлы и каталоги, начинающиеся с точки, и хотите ли вы, чтобы при сопоставлении суффикса учитывалась регистр символов .cr2.

Команда выше включает в себя каталоги и файлы, имена которых начинаются с .. Чтобы исключить такие файлы и каталоги, ставьте --exclude='.*/' --exclude='.*'перед всеми остальными --includes и --excludes. То есть используйте эту 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 не должен видеть никаких других файлов.

Элия ​​Каган
источник
5

Shotwell будет циклически перебирать все изображения, найденные в каждом каталоге, где изображение открыто, поэтому использование, find -name '*.cr2' -exec shotwell '{}' +как я изначально предложил, не очень помогает. Поскольку настройки Shotwell довольно ограничены, я могу думать только о том, чтобы открыть только те файлы, которые вам нужны, - переместить файлы в новый каталог самостоятельно.

Вы можете использовать findдля этого:

mkdir ~/cr2files
find -type f -iname '*.cr2' -not -path './dir/*' -exec cp -v -- '{}' ~/cr2files \;

Замените cpна, mvесли вы хотите избежать дублирования файлов.

Ноты:

  • mkdir ~/cr2files создайте новый каталог в вашем домашнем каталоге
  • find искать рекурсивно из текущего каталога вниз по дереву
  • -type f искать только файлы
  • -iname поиск файлов по имени, без учета регистра
  • '*.cr2'имена, заканчивающиеся на .cr2- используйте кавычки, чтобы остановить оболочку, расширяющую глобус, прежде чем она будет переданаfind
  • -not -path './dir/*'исключит содержимое каталога dirиз результатов
  • {} представляет пути найденных файлов
  • --после cpозначает запретить cpприем дополнительных опций, что позволяет избежать имен файлов, начинающихся с -проблем.

Затем вы можете открыть любой файл в новом каталоге с помощью Shotwell и просмотреть их все

Занна
источник
почему это также открывает файлы .jpg и .png в каталоге? Я вижу, что это указывает * .cr2? Как заставить его просто смотреть на файлы .cr2, когда я нажимаю стрелку влево на Shotwell? Если я использую \ вместо +, ничего не произойдет :(
user285884
ой! это проблема @ user285884 Извините, shotwell циклически перебирает все изображения, найденные в каталоге ... Дайте мне посмотреть, смогу ли я обойти это ...
Zanna
@ user285884 отредактировал, но я не могу найти элегантное решение :(
Zanna
1
хорошо, спасибо за усилия! Что касается этого, я ищу в каталоге файлы .cr2 и перемещаю их в отдельную папку с именем cr2files. Я сделал это в одной подпапке, используя mv * .cr2 ../cr2files/, и это сработало !. Тем не менее, как мне это сделать и указать, какие файлы для просмотра? Что-то типа "эй, linux, посмотри на папки 1-10 для файлов .cr2 и перемести их в папку cr2files"? Спасибо Zanna
user285884
1
хорошо для некоторого контекста о том, где я нахожусь. Я потерял несколько фотографий. Поэтому я сделал фоторепортаж, и он дал мне кучу папок, достаточных для заполнения всего моего жесткого диска. Поэтому я хочу просмотреть все папки на моем жестком диске, за исключением одной, потому что у нее есть тонна файлов .cr2, которые, как я знаю, не те, которые я ищу. Поэтому я хочу, чтобы linux просматривал все папки, кроме одной. Я не уверен, что ваш код делает это. Что {} делает? Также "-" после -v? Спасибо, Занна!
user285884
1

Вариант 1. Использование, xargsкогда имена файлов содержат пробелы

Как указывалось в комментариях ниже, использование back ticks(Вариант 3 ниже) будет прерываться, когда имена файлов содержат пробелы. Более безопасный метод использования findкоманды и передачи вывода в shotwellиспользование xargsопции выглядит следующим образом:

find . -name "*.cr2" -print0 | xargs -0 shotwell

-print0Флаг указывает найти использовать \0(нулевой символ) разделители между именами файлов и -0флаг указывает xargsожидать эти \0разделители.

Благодарим за отличные ответы, найденные здесь ( Как передать список файлов, возвращаемых командой find ) в Stack Overflow.

Вариант 2 - Использование, -execкогда имена файлов содержат пробелы

Как указывает комментарий ниже, -execопция также поддерживает имена файлов, содержащие пробелы. Другие комментарии ниже указывают на разрывы, когда количество файлов превышает. Это будет выглядеть так:

find . -name "*.cr2" -exec shotwell {} +

Вариант 3 - когда имена файлов не имеют пробелов

В старые времена, когда имена файлов имели пробелы и становились длиной 256 символов, эта опция работала нормально. Вы найдете эту опцию упомянутой на многих других сайтах, но вы не должны использовать эту опцию . Раньше использование findкоманды и передача вывода shotwellбыло самым простым способом:

shotwell `find . -name "*.cr2"`

Это запускает findиз текущего каталога и включает в себя все подкаталоги:

  • Обратите внимание на использование, back tickа не одиночные кавычки 'выше. Использование обратных тиков аналогично заключению фразы в $(...)bash.
  • Первый аргумент .дает findначальную точку, которая является текущим каталогом. Вы могли бы передать /home/$USER/Picturesили что-то еще вместо ..
  • Второй аргумент -nameсообщает find для поиска имен файлов (не каталогов).
  • Эта техника работает для всех команд, а не только shotwell. то есть вы можете использовать его для cat, head, tailи большинство других популярных команд Linux.
WinEunuuchs2Unix
источник
Использование обратных кавычек является своего рода неодобрительным, плюс есть проблемы с разделением слов. Я бы порекомендовал вам поменять его на pipe xargs и использовать -0все имена файлов, используя NULL-строку в качестве разделителя
Сергей Колодяжный
Проблема с подходом в этом ответе состоит в том, что он делает неправильную вещь, когда любое из имен файлов или любых имен каталогов, которые содержат файлы, имеют пробелы. Обратите внимание, что, хотя многие люди предпочитают $( )синтаксис подстановки команд синтаксису подстановки команд backtick, это не относится к этой проблеме - они оба терпят неудачу абсолютно одинаково. @ Serg Я предлагаю опубликовать новый ответ о том, как это сделать xargs. (Вставка подстановки " "также не сработает: все findрезультаты будут переданы как один аргумент.)
Элия ​​Каган
Я также видел xargsвариант Stack Overflowпри написании этого ответа. Я расширю с этой опцией тоже. К сожалению, сегодня утром мне пришлось загружаться с Windows 8, чтобы исправить поврежденный NTFSраздел, поэтому тестирование оказалось проблематичным. Я обновлю ответ позже, хотя. Спасибо за указание на это :)
WinEunuuchs2Unix
почему бы просто не использовать -exec?
Занна
@Zanna Я тоже добавлю -execопцию :)
WinEunuuchs2Unix
-2

Я не знал, что Shotwell даже открыл сырые файлы. Я уверен, что вы можете получить больше пробега с digikam или darktable. Digikam поставляется с некоторыми компонентами Kde и является довольно хорошим менеджером фотографий. Darktable поставляется с очень хорошими неразрушающими возможностями редактирования.

user114644
источник
Можете ли вы расширить этот ответ ( отредактировав ), включив в него подробную информацию о том, как использовать Digikam (или Darktable) для просмотра только .cr2файлов в папке? Если это так, то это может быть ценным, так как оригинальный плакат имел проблемы с получением Шотуэлл , чтобы показать только те .cr2файлы. Хотя я добавил дополнительные подходы к своему ответу, чтобы сделать возможным использование Shotwell для просмотра только этих файлов, а не других, я довольно сильно подозреваю, что Shotwell не лучший инструмент для этого.
Элия ​​Каган