Зазвичай вам потрібно просто відкрити 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.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
і не знаєте, яку з цих команд ви хочете, я пропоную скористатися цією, якщо ви хочете переконатися, що нічого не пропустите. Однак вам слід пам’ятати, що точкові файли можуть містити метадані, а точкові файли, названі як зображення, насправді не можуть бути зображеннями. Дивіться дискусії щодо точкових файлів у розділі "Запуск знімків із переліком імен файлів зображень" вище, а також про точкові файли та чутливість регістру в "Шлях 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 не повинен бачити жоден з інших файлів.