Зазвичай вам потрібно просто відкрити Shotwell і перетягнути в папку.
Якщо вам потрібно, ви можете змусити оболонку скласти список файлів CR2 і сказати 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. Якщо ви навмисно не назвали ваші файли чи папки таким чином, то скоріше за все файл dotfile із розширенням назви зображення чи документа може бути файлом метаданих, а не фактичним зображенням чи документом. Наприклад, 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файли, шукаючи нечутливий регістр та включаючи .-файли та файли у .-директорії:
shopt -s globstar dotglob nocaseglob
shotwell **/*.cr2
Або використовуйте .[cC][rR]2замість самого .cr2глобусного шаблону. Наприклад, це так само, як і вище:
shopt -s globstar dotglob
shotwell **/*.[cC][rR]2
Зауважте, що чутливість регістру повністю відокремлена від відповідності .файлів і папок чи ні . Ви можете видалити dotglobз наведених вище прикладів, і вони все ще можуть бути невідчутними до регістру.
Щоб вказати каталог, а не просто використовувати поточний каталог, поставте його ім'я та a /перед **/*.cr2глобусом. Наприклад, замінивши shotwellвищевказану команду на цю, ви відкриєте всі .cr2файли всередині Picturesпідкаталогу вашого домашнього каталогу:
shotwell ~/Pictures/**/*.cr2
На відміну від першої команди, яка використовує поточний каталог, незалежно від того, де ви запускаєте цю команду, ви скажете Shotwell відкрити ті самі файли.
Тестування
Якщо вам справді доведеться використовувати для цього термінал, то я здогадуюсь, що це може бути частиною чогось більш складного. Якщо вам подобається, ви можете протестувати такі команди, перш ніж їх реально виконати, замінивши shotwellна printf '%s\n'. Замість того, щоб передавати імена файлів Шотвелл, вони перераховують їх по одному на рядок. Наприклад, на моїй машині:
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 . Для 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і не знаєте, яку з цих команд ви хочете, я пропоную скористатися цією, якщо ви хочете переконатися, що нічого не пропустите. Однак вам слід пам’ятати, що точкові файли можуть містити метадані, а точкові файли, названі як зображення, насправді не можуть бути зображеннями. Дивіться дискусії щодо точкових файлів у розділі "Запуск знімків із переліком імен файлів зображень" вище, а також про точкові файли та чутливість регістру в "Шлях 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 не повинен бачити жоден з інших файлів.