Я хочу, щоб shotwell відкрив усі .cr2 файли в папці та всі її папки, який командний рядок я використовую?


9

Щось на зразок

shotwell *.cr2 ./

Це не працює, але в основному я хочу використовувати знімок для відкриття всіх файлів, що закінчуються .cr2в поточному каталозі та в тому числі, в тому числі підпапки)

Контекст полягає в тому, що мені не вистачає фотографій, які я взяв на камеру, яку я видалив зі своєї картки пам'яті.

Для них є мініатюри у "відсутніх зображеннях", але я не можу їх знайти. Тож я подумав, що побіжу photorecспробувати їх знайти. У результаті фоторепортаж подарував мені човен з папками та файлами, достатньо, щоб він заповнив мій жорсткий диск. Замість того, щоб просіювати один за одним всі файли, я вирішив шукати .cr2 файли на своєму жорсткому диску, уникаючи певної папки, Photogsяку я знаю, що їх немає, тому що вони не були частиною photorecдампа даних.


@EliahKagan дивіться коментарі (які тривали в чаті!) Для детальної інформації тут . Я не впевнений, чи можна і як редагувати питання, тому прошу порадити, враховуючи, що ви створили таку прекрасну відповідь
Zanna

@ user285884 Останнє редагування моєї відповіді включає детальну процедуру побудови дерева символічних посилань на просто файли .cr2, які потім можна відкрити в Shotwell (та деякі інші методи). Це повинно подолати проблему перегляду зайвих, не-.cr2 файлів у Shotwell, а також проблему недостатнього місця на цільовому пристрої для переміщення чи копіювання файлів. З відповідного чату я не був впевнений, чи вирішив це ще.
Елія Каган

Відповіді:


6

Зазвичай вам потрібно просто відкрити Shotwell і перетягнути в папку.

Якщо вам потрібно, ви можете змусити оболонку скласти список файлів CR2 і сказати 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. Якщо ви навмисно не назвали ваші файли чи папки таким чином, то скоріше за все файл 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 не повинен бачити жоден з інших файлів.


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, коли натискаю стрілку ліворуч на кадр? Якщо я використовую \ замість +, нічого не відбувається :(
user285884

ой! це проблема @ user285884 я перепрошую, Шотуелламі циклів через всі зображення , які він знаходить в каталозі ... дозвольте мені побачити , якщо я можу з'ясувати спосіб навколо нього ...
Žanna

@ user285884 відредаговано, але я не можу розробити елегантне рішення :(
Zanna

1
ок, дякую за зусилля! про це я шукаю через каталог файлів .cr2 і переміщую їх в окрему папку для виклику cr2files. Я робив це в одній підпапці, використовуючи mv * .cr2 ../cr2files/, і він працював !. Однак як це зробити і вказати, які файли слід переглянути? Щось на кшталт "ей Linux дивись на папки 1-10 для .cr2 файлів і перемістиш їх у папку cr2files"? Дякую Zanna
користувачеві285884

1
добре для деякого контексту, де я перебуваю. Я втратив кілька знімків. Тож я зробив фоторепортаж, і це дало мені папку, достатню для заповнення всього мого жорсткого диска. Тому я хочу шукати всі папки на моєму жорсткому диску, окрім однієї, тому що в ній є тонна .cr2 файлів, які я знаю, це не та, яку я шукаю. Тому я хочу, щоб Linux пройшов усі папки, крім однієї. Я не впевнений, що ваш код це робить. Що робить {}? Також "-" після -v? Дякую Занні!
користувач285884

1

Варіант 1 - Використання, xargsколи імена файлів містять пробіли

Як зазначали коментарі нижче, використання back ticks(Варіант 3 нижче) буде порушений, коли імена файлів містять пробіли. Більш безпечний метод використання findкоманди та передачі виводу на shotwellвикористання xargsпараметра виглядає приблизно так:

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

-print0Прапор вказує знайти використовувати \0(нульовий символ) роздільники між іменами файлів і -0прапор вказує xargsочікувати ці \0роздільники.

Подяка за чудові відповіді, знайдені тут ( Як передати список файлів, повернених командою find ) на стеку 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говорить про пошук для пошуку імен файлів (а не каталогів).
  • Ця методика працює для всіх команд, а не лише shotwell. тобто ви можете використовувати його для cat, head, tailі більшість інших популярних команд Linux.

Використання задніх посилань нахмуриться, плюс у нього проблеми з розщепленням слів. Я рекомендую вам змінити його на "трубу" xargs та використовувати -0всі назви файлів, використовуючи рядок NULL як роздільник
Сергій Колодяжний

Проблема з підходом у цій відповіді полягає в тому, що він робить неправильно, коли будь-яка назва файлів або будь-які назви каталогів, що містять файли, мають пробіли. Зауважте, що хоча багато людей віддають перевагу $( )синтаксису підстановки команд синтаксису заміни команди backtick, це не має відношення до цієї проблеми - вони обоє відмовляються точно однаково. @Serg Я пропоную опублікувати нову відповідь про те, як це зробити xargs. (Введення заміни " "також не спрацювало б: усі findрезультати будуть передані як єдиний аргумент.)
Елія Каган

Я також бачив xargsваріант, Stack Overflowколи писав цю відповідь. Я також розгорнуся з цим варіантом. На жаль, мені довелося завантажитися з Windows 8 сьогодні вранці, щоб виправити пошкоджений NTFSрозділ, тому тестування було проблематичним. Однак відповідь я оновлю пізніше. Дякуємо, що
вказали

чому б не просто використовувати -exec?
Занна

@Zanna Я також додаю -execваріант :)
WinEunuuchs2Unix

-2

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


Чи можете ви розширити цю відповідь ( відредагувавши ), щоб включити детальну інформацію про використання Digikam (або Darktable) для перегляду лише .cr2файлів у папці? Якщо це так, то це може бути цінним, так як оригінальний плакат мав проблеми з отриманням Шотуелл , щоб показати тільки ті .cr2файли. Хоча я додав додаткові підходи до своєї відповіді, щоб зробити можливим використовувати Shotwell для перегляду лише тих файлів і жодних інших, я досить сильно підозрюю, що Shotwell не є найкращим інструментом для цього.
Елія Каган
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.