Chcę, aby shotwell otworzył wszystkie pliki .cr2 w folderze i wszystkich jego podfolderach, jakiej linii poleceń używam?

9

Coś jak

shotwell *.cr2 ./

To nie działa, ale w zasadzie chcę użyć shotwell do otwarcia wszystkich plików, które kończą się .cr2w bieżącym katalogu i (w tym w podfolderach)

Kontekst polega na tym, że brakuje mi zdjęć, które zrobiłem aparatem, które usunąłem z karty pamięci.

W „brakujących obrazach” shotwell są dla nich miniatury, ale nie mogę ich znaleźć. Pomyślałem więc, że pobiegnę, by photorecje znaleźć. W rezultacie photorec dostarczyło mi mnóstwo plików i folderów, co wystarczyło, aby zapełnić mój dysk twardy. Zamiast przeszukiwać wszystkie pliki jeden po drugim, postanowiłem wyszukać pliki .cr2 na moim dysku twardym, unikając określonego folderu, o Photogsktórym wiem, że ich nie ma, ponieważ nie były one częścią photoreczrzutu danych.

użytkownik285884
źródło
@EliahKagan zobacz komentarze (które kontynuowano na czacie!), Aby uzyskać szczegółowe informacje tutaj . Nie jestem pewien, czy i jak edytować pytanie, więc radzę, biorąc pod uwagę, że stworzyłeś tak piękną odpowiedź
Zanna
@ user285884 Ostatnie zmiany mojej odpowiedzi obejmują szczegółową procedurę budowania drzewa dowiązań symbolicznych tylko do plików .cr2, które można następnie otworzyć w Shotwell (i kilka innych metod). Powinno to przezwyciężyć problem wyświetlania dodatkowych plików w formacie innym niż .cr2 w Shotwell, a także problem braku miejsca na urządzeniu docelowym do przeniesienia lub skopiowania plików. Z odpowiedniego czatu nie byłem pewien, czy rozwiązałeś to jeszcze.
Eliah Kagan

Odpowiedzi:

6

Zwykle wystarczy otworzyć Shotwell i przeciągnąć do folderu.

W razie potrzeby możesz zmusić powłokę do utworzenia listy plików CR2 i powiedzieć Shotwellowi, aby otworzył tylko te pliki. Czasami może to być to, czego chcesz, ale w tym przypadku nie zrobiło to dokładnie tego, czego potrzebujesz, ze względu na zachowanie Shotwell - w niektórych innych przypadkach, funkcję - automatycznego wyświetlania innych plików graficznych (wszystkich typów) znajdujących się w te same foldery, co otwarte obrazy.

Aby upewnić się, że Shotwell wie tylko o obrazach, którymi jesteś zainteresowany, możesz sklonować drzewo katalogów gdzie indziej, kopiując tylko .cr2pliki i foldery, które je zawierają, ale nic więcej. Może to jednak zająć znaczną dodatkową przestrzeń. Zatem innym podejściem jest zbudowanie hierarchii dowiązań symbolicznych - w której zamiast posiadania nowego drzewa katalogów kopii oryginalnych .cr2plików, masz nowe drzewo katalogów syminks do nich. Zajmuje to znacznie mniej miejsca.

Ta odpowiedź obejmuje wszystkie te podejścia.

Otwieranie folderu zdjęć (w tym podfolderów) w Shotwell

Sam Shotwell oferuje dwa sposoby otwarcia całego drzewa katalogów ze zdjęciami. Jeśli to zadziała, nie będziesz musiał robić nic sprytnego w wierszu poleceń, a nawet w ogóle go używać. Jeśli nie, możesz to zrobić w połączeniu z inną techniką. (Na przykład, jeśli utworzysz nowy katalog dowiązań symbolicznych lub kopii swoich .cr2plików, możesz użyć jednego z tych sposobów, aby go otworzyć.)

Sposób 1: Wystarczy otworzyć cały folder w Shotwell.

W Shotwell w menu Plik kliknij polecenie Importuj z folderu . Następnie wybierz folder, z którego chcesz importować obrazy. Nie będzie to ograniczone do .cr2plików, ale jeśli otwierasz pliki z wielu podfolderów zawierających .cr2obrazy utworzone z aparatu cyfrowego, najprawdopodobniej będą to jedyne obecne pliki.

Zrzut ekranu elementu menu Importuj z folderu w menu Plik Shotwell.

Zobacz Jakoba odpowiedź do Pokaż wszystkie rekursywnie (obejmują wszystkie podfoldery) aby uzyskać więcej informacji.

Sposób 2: Przeciągnij folder do Shotwell.

W większości środowisk graficznych i przeglądarek plików możesz także otworzyć Shotwell i przeciągnąć folder zawierający twoje zdjęcia do okna Shotwell. Podobnie jak w przypadku importu z folderu , to kolejny sposób, w jaki Shotwell zaleca otwieranie zdjęć.

Zrzut ekranu przedstawiający przeciąganie folderu Desktop do Shotwell w celu zaimportowania zawartych w nim obrazów.

Przeciągając z okna przeglądarki plików lub pulpitu do Shotwell, możesz przeciągnąć do określonej biblioteki. Lub jeśli nie masz skonfigurowanych wielu bibliotek, możesz po prostu przeciągnąć w dowolnym miejscu i to działa. (Nie musisz nawet przeciągać do lewego panelu).

Ta metoda jest bardzo wygodna i równie skuteczna, jak ręczne wybranie folderu (za pomocą polecenia Plik > Importuj z folderu , jak opisano powyżej). Gdy otwierasz pliki lub foldery przy użyciu jednej z tych metod , Shotwell daje Ci możliwość otwarcia zdjęć bez kopiowania ich do swojej biblioteki.

Zrzut ekranu okna dialogowego w Shotwell, które prosi użytkownika o wybór pomiędzy kopiowaniem zdjęć do lokalizacji ich biblioteki Shotwell, a importowaniem ich w miejscu, bez kopiowania.

Aby zaimportować bez kopiowania, kliknij opcję Importuj na miejscu zamiast Kopiuj zdjęcia .


Uruchamianie Shotwell z listą nazw plików obrazów

Jeśli z jakiegoś powodu chcesz lub musisz to zrobić, uruchamiając polecenie w terminalu, możesz uruchomić shotwellpolecenie i przekazać do niego nazwę pliku każdego obrazu jako argument. Globstar ułatwia:

shopt -s globstar
shotwell **/*.cr2

To otwiera .cr2pliki znajdujące się w dowolnym miejscu w bieżącym katalogu. Różni się to od uruchomienia Shotwell, a następnie przeciągnięcia folderu, ponieważ Shotwell będzie próbował tylko zaimportować pliki, których nazwy nadasz. Ponieważ jednak Shotwell często pokazuje inne pliki obrazów z tych samych folderów, co pliki, które kazałeś mu otworzyć, może to nie być odpowiednie dla twoich potrzeb. ( Dalsze informacje o problemie sugerują, że tak nie jest . Alternatywę można znaleźć poniżej).

Nie obejmuje to plików ani podfolderów, których nazwy rozpoczynają się od. . Jeśli jednak masz pliki CR2, których nazwy zaczynają się od kropki, prawdopodobnie przez większość czasu nie chcesz ich otwierać w Shotwell. Chyba że celowo nazwałeś swoje pliki lub foldery w ten sposób, plik kropkowy z rozszerzeniem pliku obrazu lub dokumentu jest bardziej prawdopodobne niż plik metadanych, a nie rzeczywisty obraz lub dokument. Na przykład macOS często dodaje takie pliki (np. ._kittens.cr2Rzeczywisty obraz kittens.cr2) podczas uzyskiwania dostępu do zewnętrznych nośników (w tym dysków flash i aparatów cyfrowych).

Jeśli chcesz również znaleźć pliki, których nazwy zaczynają się od .lub które znajdują się w folderach, których nazwy zaczynają się od. , włącz również dotglob. Możesz to zrobić za pomocą shopt -s dotgloblub przekazując oba globstari dotglobdo shoptwbudowanego:

shopt -s globstar dotglob

Domyślnie w globach rozróżniana jest wielkość liter. Ale może chcesz , aby dopasować nazwy plików rozróżniana wielkość liter , tak aby otworzyć pliki z rozszerzeniem .cr2, .Cr2, .cR2, i .CR2. Aby to zrobić:

  • Włącz nocaseglob, uruchamiając shopt -sgo nocaseglob, sam lub z innymi opcjami powłoki. Na przykład, aby uruchomić shotwellna wszystkich .cr2plikach, przeszukiwać bez rozróżniania wielkości liter i dołączać -files .i pliki do .-directories:

    shopt -s globstar dotglob nocaseglob
    shotwell **/*.cr2
    
  • Lub użyj .[cC][rR]2zamiast .cr2samego wzorca globu. Na przykład osiąga to to samo co powyżej:

    shopt -s globstar dotglob
    shotwell **/*.[cC][rR]2
    

    Pamiętaj, że rozróżnianie wielkości liter jest całkowicie niezależne od tego, czy .pliki i foldery są dopasowane. Możesz usunąć dotglobz powyższych przykładów i nadal mogą one nie uwzględniać wielkości liter.

Aby określić katalog zamiast używać tylko bieżącego katalogu, umieść jego nazwę i a /przed **/*.cr2glob. Na przykład zastąpienie shotwellpowyższego polecenia tym poleceniem spowoduje otwarcie wszystkich .cr2plików w Picturespodkatalogu katalogu domowego:

shotwell ~/Pictures/**/*.cr2

W przeciwieństwie do pierwszego polecenia, które korzysta z bieżącego katalogu, bez względu na to, gdzie uruchomisz to polecenie, będziesz kazał Shotwell otworzyć te same pliki.

Testowanie

Jeśli naprawdę musisz do tego użyć terminala, to zgaduję, że może być częścią czegoś bardziej złożonego. Jeśli chcesz, możesz przetestować takie polecenia przed ich uruchomieniem, zastępując shotwellje printf '%s\n'. Zamiast przekazywać nazwy plików do Shotwell, która wyświetla je po jednym w wierszu. Na przykład na moim komputerze:

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

Wyłączanie Globstar i innych opcji powłoki

Włączono opcję powłoki globstar, tak jak zrobiła to shopt -s globstarkomenda (powyżej). Jeśli jest już włączony, nie potrzebujesz wielu poleceń. I wystarczy ustawić globstar tylko raz na instancję powłoki.

Możesz wyłączyć globstar, uruchamiając:

shopt -u globstar

Możesz sprawdzić, czy globstar jest włączony, czy wyłączony, uruchamiając:

shopt globstar

Jeśli używasz globstar w skrypcie, powinieneś rozważyć jego wyłączenie, jeśli może pojawić się kod w tym samym skrypcie, który nie został napisany z myślą o globstar. Na przykład pisanie, **gdy masz na myśli, *zwykle nie jest problemem, gdy globstar jest wyłączony, ale przy włączonej globstar może powodować poważne problemy, powodując, że polecenie wpływa na znacznie więcej plików niż ktoś zamierzał.

Podobnie, jeśli użyłeś dotglob lub nocaseglob i chcesz je również wyłączyć, możesz to zrobić odpowiednio za pomocą shopt -u dotglobi shopt -u nocaseglob. Możesz także przekazać wiele opcji powłoki, shopt -uaby je rozbroić w tym samym czasie. Na przykład, aby wyłączyć globstar, dotglobi nocaseglob:

shopt -u globstar dotglob nocaseglob

W porównaniu do globstar, możesz popełnić mniej poważnych błędów, ponieważ zapomniałeś, że zostawiłeś dotglob lub nocaseglob włączony. Ale inne osoby (w tym osoby, z którymi konsultujesz w witrynach takich jak Ask Ubuntu) zwykle zakładają, że dotglob i nocaseglob są wyłączone, gdy sugerują polecenia do użycia, chyba że powiesz im inaczej.

Aby uzyskać więcej informacji na temat tych opcji powłoki związanych z globem (a także ogólnie globs ), zobacz instrukcję obsługi bash . Wszystkie są omówione przede wszystkim w 4.3.2 Wbudowany Shopt . W przypadku globstar patrz także 3.5.8.1 Dopasowywanie wzorców . Dotglob, patrz także 3.5.8 Rozszerzenie nazwy pliku .


Budowanie nowego drzewa katalogów

Ponieważ w twoim przypadku naprawdę potrzebujesz Shotwell do wyświetlania tylko .cr2 plików, nie masz .cr2plików w tych samych folderach z .cr2plikami, a przeglądanie obrazów w Shotwell automatycznie oferuje te pliki , wygląda na to, że będziesz musiał mieć folder, który nie zawiera innych plików graficznych niż .cr2pliki, które próbujesz otworzyć.

Przenoszenie plików, jak zasugerowałeś , jest jednym podejściem, ale zamiast tego zalecam albo skopiowanie plików, albo, lepiej, tworzenie dowiązań symbolicznych do plików (patrz także FOLDOC ), ponieważ:

  • Jeśli przenosisz pliki między urządzeniami, to i tak wymaga kopiowania, więc w takim przypadku przenoszenie nie jest szybsze.
  • Jeśli masz miejsce, często dobrym pomysłem jest przechowywanie niezmodyfikowanego folderu ze wszystkim, co zacząłeś, dopóki nie upewnisz się, że to, co zrobiłeś, jest prawidłowe zgodnie z Twoimi potrzebami. Oczywiście nie zawsze ma to zastosowanie lub jest praktyczne. Ale w twoim przypadku pliki te są wynikiem operacji odzyskiwania danych. Przydatne może być prowadzenie łatwego do odczytania zapisu tego, co zostało odzyskane i skąd.
  • Jeśli zdecydujesz się utworzyć dowiązania symboliczne, ilość zużywanej dodatkowej przestrzeni jest bardzo mała . (Jeśli jednak dysk docelowy jest całkowicie zapełniony , nadal będziesz musiał zwolnić na nim miejsce - lub użyć innego dysku docelowego - aby utworzyć dowiązania symboliczne).

Ty też musisz podjąć inną decyzję. Czy tworzysz wszystkie nowe wpisy (kopie lub dowiązania symboliczne) w tym samym katalogu, spłaszczając hierarchię plików? Czy tworzysz katalogi w miejscu docelowym odpowiadającym każdemu z katalogów w źródle, które zawierają co najmniej jeden .cr2plik?

  • Spłaszczanie hierarchii plików pozwala łatwo zobaczyć wszystkie pliki jednocześnie. W szczególności łatwo jest zobaczyć nazwy i rozmiary plików jednocześnie, a także wybrać dowolną kombinację plików w graficznej przeglądarce plików.

  • Ale traci także informacje o tym, w których folderach się znajdowały, co może być cenne (chociaż możesz wrócić do oryginalnego folderu i poszukać go tam, jeśli nie przeniesiesz plików).

  • Większy problem ze spłaszczeniem hierarchii plików polega jednak na tym, że w różnych miejscach znajdują się dwa lub więcej plików o tej samej nazwie . Jeśli spłaszczysz hierarchię plików, w zależności od tego, jak to zrobisz, kopiowanie (lub łączenie) wszystkich z wyjątkiem pierwszego nie powiedzie się i pojawi się błąd lub ostrzeżenie, albo wszystkie oprócz ostatniej kopii (lub linku) zostać nadpisanym .

    To kolejny powód, dla którego zalecamy kopiowanie lub tworzenie dowiązań symbolicznych zamiast przenoszenia plików. Jeśli „z powodzeniem” przeniesiesz wiele plików do tego samego pliku, stracisz wszystkie oprócz ostatniego!

Ze względu na wady polegające na spłaszczeniu wszystkiego do jednego katalogu bez podkatalogów, podejścia, które tu podejmuję, budują nowe drzewo katalogów w miejscu docelowym.

Sposób 1: Kopiowanie

Pokazuję to jako pierwsze, ponieważ jest trochę prostsze, ale sugeruję, aby zamiast tego utworzyć dowiązania symboliczne („Way 2”), szczególnie jeśli na docelowym dysku może nie być wystarczającej ilości miejsca do przechowywania wszystkich plików. „Droga 2”, która jest nieco bardziej skomplikowana, jest o wiele bardziej szczegółowa, ponieważ wydaje się, że jest mniej zasobów na temat korzystania z tej techniki, jest to sposób, w jaki oczekuję, że większość osób w tej sytuacji będzie wolała, i informacje, które dotyczą obu metod - podstawowa rada na temat ucieczki przestrzeni na ścieżkach - jest tam raczej niż tutaj.

Kiedy musisz skopiować drzewo katalogów i dostosować operację kopiowania, zwykle powinieneś użyć rsynczamiast cp. To jest jeden z tych przypadków.

Zastępując srcścieżkę do katalogu najwyższego poziomu zawierającego wszystkie pliki CR2 i zastępując destnazwą katalogu, który chcesz utworzyć, który będzie zawierał hierarchię dowiązań symbolicznych do plików CR2, uruchom:

rsync -rl --prune-empty-dirs --include='*/' --include='*.cr2' --exclude='*' src/ dest

Nie zapomnij o /nazwie katalogu źródłowego, chyba że chcesz utworzyć w nim dodatkowy katalog najwyższego poziomudest . Oznacza to, że jeśli pominiesz końcowy /, rsyncspowoduje to utworzenie katalogu docelowego dla Ciebie dest. Załóżmy na przykład, że srcścieżka względna nie zawiera /. Następnie:

  • Ze src/w rsyncpoleceniu dostaniesz dowiązania dest/foo/bar.cr2do pliku src/foo/bar.cr2.
  • Ze srcw rsyncpoleceniu dostaniesz dowiązania do pliku .dest/src/foo/bar.cr2src/foo/bar.cr2

Ponieważ może to być mylące dla katalogu najwyższego poziomu, w którym umieszczane będą dowiązania symboliczne, aby mieć taką samą nazwę jak nazwa katalogu najwyższego poziomu zawierającego .cr2pliki, które będą wskazywać dowiązania symboliczne, zalecam umieszczenie /na końcu miejsca docelowego nazwa katalogu w twoim rsyncpoleceniu. (I, dla katalogu źródłowego, daj mu katalog, który jest pusty, nie istnieje lub jest w inny sposób przeznaczony do tego celu. W przeciwnym razie będziesz zaśmiecać jakiś inny folder.)

Jak to zwykle w przypadku, gdy przekazać nazwę pliku lub katalogu do programu wiersza polecenia lub skryptu, jeśli docelowe lub źródłowe ścieżki katalogów zawierać żadnych spacji puste (lub znaki traktowane specjalnie przez powłokę, jak \, $, 'i różne inne znaki interpunkcyjne), będziesz musiał je zacytować . Szczegółowo opisałem, jak to zrobić, w najczęstszym przypadku spacji, w „Drodze 2” - tutaj również znajdują się porady dotyczące cytowania w tej sekcji. Jeśli jednak nie jesteś pewien, jak podać nazwę folderu, możesz poprosić Ubuntu, aby zrobił to za Ciebie, po prostu przeciągając folder do Temrminal; jego pełna ścieżka zostanie wklejona z poprawnym cytatem .

Po skopiowaniu tylko .cr2plików i folderów, które je zawierają, możesz otworzyć folder docelowy w Shotwell. (Patrz „Otwieranie folderu obrazów (w tym podfolderów) w Shotwell” powyżej). Jednak przed uruchomieniem rsynczalecam zdecydowanie, czy chcesz pominąć wpisy rozpoczynające się od .i czy chcesz dołączyć wpisy z sufiksami wariantów. Jeśli tak, musisz uruchomić nieco inne rsyncpolecenie.

Dostosowywanie obsługi kropkowanych wpisów i rozróżnianie wielkości liter

Możesz użyć innego rsyncpolecenia, aby zmienić, czy pliki i katalogi zaczynające się od kropki są pomijane i czy chcesz, aby rozróżnianie wielkości liter w dopasowaniu do sufiksu było czy nie .cr2.

Powyższa komenda robi to katalogi i pliki, których nazwy zaczynają się .. Aby wykluczyć takie pliki i katalogi, umieszczone --exclude='.*/' --exclude='.*'przed wszystkimi innymi --includes i --excludes. Oznacza to, że rsynczamiast tego użyj tego polecenia (z odpowiednimi podstawieniami dla srci dest, oczywiście):

rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.cr2' --exclude='*' src/ dest

Te rsyncpolecenia pokazane zostały dotąd wielkość liter i nie skopiuje pliki, które kończą się .CR2, .Cr2czy .cR2zamiast .cr2. Jeśli chcesz skopiować takie pliki, musisz to uwzględnić przy użyciu --includewzorca *.[cC][rR]2zamiast *.cr2.

To trzecie polecenie nie rozróżnia wielkości liter i (podobnie jak pierwsze polecenie) nie pomija plików i katalogów, których nazwy zaczynają się od .:

rsync -rl --prune-empty-dirs --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest

Jeśli podejmiesz podejście do kopiowania plików rsynci nie masz pewności, które z tych poleceń chcesz, sugeruję użycie tego, jeśli chcesz się upewnić, że niczego nie umknie. Należy jednak pamiętać, że pliki dot mogą zawierać metadane, a pliki o nazwach podobnych do obrazów mogą nie być tak naprawdę obrazami. Zobacz dyskusje na temat plików dotfile w sekcji „Uruchamianie Shotwell z listą nazw plików graficznych” powyżej, a także na temat plików kropkowych i rozróżniania wielkości liter w „Way 2” poniżej.

Ten czwarty komenda jest wielkość liter i (podobnie jak drugiego polecenia) nie pominąć pliki i katalogi, których nazwy zaczynają się od .:

rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest

Sposób 2: Tworzenie dowiązań symbolicznych

Właśnie to zalecam, ale Way 1 jest w porządku, jeśli masz wystarczająco dużo miejsca na dysku docelowym. Nie musisz czytać sposobu 1, aby z tego skorzystać.

Przedstawiona tutaj metoda tworzy listę .cr2plików i pętli, tworząc katalogi docelowe zgodnie z potrzebami i wypełniając je symbolicznymi linkami do każdego .cr2pliku.

Jest to na tyle skomplikowane, że sugeruję umieszczenie go w skrypcie zamiast wpisywania go interaktywnie. Możesz umieścić skrypt w dowolnym miejscu, ale dla wygody pokażę, jak to zrobić ze skryptem umieszczonym bezpośrednio w folderze domowym.

Napisz (lub wklej) skrypt.

Utwórz plik tekstowy make-symlinksw folderze domowym. Rozszerzenie pliku nie jest potrzebne.

Możesz to zrobić w dowolnym edytorze tekstu, takim jak Vim, Nano, Gedit lub Leafpad. Jednak nie używaj edytora tekstu, takiego jak LibreOffice Writer. (Możesz to nawet zrobić, uruchamiając cat > ~/make-symlinks, wklejając zawartość pliku i naciskając Ctrl+ Dw nowym wierszu, jeśli chcesz).

Jeśli nazywasz skrypt innym niż make-symlinks, upewnij się, że użyjesz go podczas uruchamiania poleceń korzystających ze skryptu później.

#!/bin/bash

shopt -s globstar dotglob nocaseglob

for f in **/*.cr2; do
    mkdir -p "$1/$(dirname "$f")"
    ln -s "$PWD/$f" "$1/$f"
done

Umieść to w pliku i zapisz plik. Skrypt ten wykorzystuje globstar, funkcję Bash wyjaśnioną powyżej w „Uruchamianie Shotwell z listą nazw plików obrazów” .

Możesz zmienić sposób, w jaki obsługuje on kropkowane wpisy i rozróżnia wielkość liter.

W zależności od potrzeb możesz wprowadzić pewne zmiany:

  • Jeśli nie chcesz dołączać .cr2plików, których nazwy zaczynają się od .lub które znajdują się w katalogach, których nazwy zaczynają się od ., usuń dotglobz shoptwiersza.

    Pliki i katalogi, których nazwa zaczyna się od, .są często używane do metadanych (patrz sekcja „Uruchamianie Shotwell z listą nazw plików obrazów” powyżej). Z drugiej strony, jeśli chcesz mieć pewność, że masz wszystko, lub jeśli czegoś brakuje w niewytłumaczalny sposób, co do którego masz pewność, że tam jest, powinieneś to zachować dotglob.

  • Jeśli chcesz dołączyć tylko pliki, które kończą się dokładnie .cr2ale nie wariantach sprawy ( .CR2, .Cr2, i .cR2), a następnie należy usunąć nocaseglob. Ponieważ Twoja sytuacja wiąże się z odzyskiwaniem danych, a Shotwell nie pokaże żadnych plików, które przegapiłeś podczas otwierania katalogu dowiązań symbolicznych - w końcu o to chodzi w tej metodzie - prawdopodobnie będziesz chciał je zachować nocaseglob.

Zrób to.

Uruchom to polecenie, aby oznaczyć skrypt jako wykonywalny:

chmod +x ~/make-symlinks

Uruchom go u źródła i przekaż miejsce docelowe jako argument.

Następnie zmień katalog na katalog źródłowy, tj. Folder najwyższego poziomu zawierający zdjęcia. Na przykład, jeśli znajdują się one w Picturespodkatalogu katalogu domowego, uruchomiłbyś:

cd ~/Pictures

Tutaj uruchomisz skrypt. Przekaż katalog docelowy do skryptu jako argument wiersza polecenia.

Na przykład, jeśli chcesz, aby katalog wywoływany cr2sbył tworzony na pulpicie i zawierał dowiązania symboliczne, uruchom:

~/make-symlinks ~/Desktop/cr2s

Lub jeśli chcesz tylko ten katalog bezpośrednio w folderze domowym:

~/make-symlinks ~/cr2s

Lub jeśli masz zamontowany dysk /media/you/MyDrivei chcesz utworzyć na nim folder o nazwie linkszawierającej łącza symboliczne:

~/make-symlinks /media/you/MyDrive/links

Ale jeśli dysk jest /media/you/My Drive(ze spacją), musisz użyć cudzysłowu. Każda z tych prac (użyj tylko jednej, nie uruchamiaj ich wszystkich):

~/make-symlinks '/media/you/My Drive/links'
~/make-symlinks /media/you/'My Drive'/links
~/make-symlinks /media/you/My\ Drive/links

Ale jeśli korzystasz ~z katalogu domowego, nie cytuj tego:

~/make-symlinks ~/'Two Words'   # good
~/make-symlinks ~/Two\ Words    # good
~/make-symlinks '~/Two Words'   # BAD, because ~ doesn't get expanded

make-symlinkstworzy katalog docelowy, jeśli jeszcze nie istnieje, tak jak tworzy w nim podkatalogi. Jednak nadal działa, jeśli miejsce docelowe już istnieje.

Możesz nawet uruchomić go wiele razy i przekazać ten sam katalog docelowy (na przykład, jeśli przerwałeś go za pomocą Ctrl+ C), ale otrzymasz failed to create symbolic linkbłędy dla już istniejących dowiązań symbolicznych, co może być mylące.

Prawdopodobnie nie chcesz przekazać nazwy katalogu, który już istnieje i zawiera niepowiązane pliki (takie jak katalog domowy) make-symlinks. Jeśli tak, możesz oczekiwać, że utworzy się w nim cała masa dowiązań symbolicznych i podfolderów. Prawdopodobnie chcesz użyć nowego katalogu - lub takiego, który jeszcze nie istnieje - dla make-symlinks.

Zaimportuj nowo utworzone drzewo dowiązań symbolicznych do Shotwell.

Po uruchomieniu make-symlinkszaimportuj katalog, który mu przekazałeś, do Shotwell, korzystając z jednej z metod podanych w pierwszej części tej odpowiedzi ( „Otwieranie folderu obrazów (w tym podfolderów) w Shotwell” ). Na przykład możesz otworzyć Shotwell i przeciągnąć folder do.

Ponieważ wszystkie wpisy w folderze są symbolicznymi linkami do .cr2plików lub zawierających je katalogów, bez żadnych innych typów plików, Shotwell nie powinien widzieć żadnych innych plików.

Eliah Kagan
źródło
5

Shotwell będzie cyklicznie przeglądać wszystkie obrazy znalezione w każdym katalogu, w którym obraz jest otwarty, więc używanie find -name '*.cr2' -exec shotwell '{}' +zgodnie z pierwotną sugestią tak naprawdę nie pomaga. Ponieważ ustawienia Shotwell są raczej ograniczone, jedynym sposobem, w jaki mogę myśleć o otwieraniu tylko tych plików, które chcesz, jest samodzielne przeniesienie plików do nowego katalogu.

Możesz użyć finddo tego:

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

Wymień cpsię mvjeśli chcesz uniknąć tworzenia duplikatów plików.

Uwagi:

  • mkdir ~/cr2files stwórz nowy katalog w swoim katalogu domowym
  • find szukaj rekurencyjnie od bieżącego katalogu w dół przez drzewo
  • -type f szukaj tylko plików
  • -iname wyszukaj pliki według nazwy, ignorując wielkość liter
  • '*.cr2'nazwy kończące się na .cr2- użyj cudzysłowów, aby zatrzymać rozszerzanie globu przez powłokę, zanim zostanie ona przekazanafind
  • -not -path './dir/*'wykluczy zawartość katalogu dirz wyników
  • {} reprezentuje ścieżki znalezionych plików
  • --po cpto powiedzieć, aby cpnie akceptować dalszych opcji, co pozwala uniknąć nazw plików zaczynających się od -powodowania problemów

Następnie możesz otworzyć dowolny plik w nowym katalogu za pomocą Shotwell i przeglądać je wszystkie

Zanna
źródło
dlaczego to również otwiera pliki .jpg i .png w katalogu? Widzę, że określa * .cr2? Jak sprawić, by przeglądał pliki .cr2 po naciśnięciu lewej strzałki na shotwell? Jeśli
użyję
O! to jest problem @ user285884 Przykro mi, shotwell przegląda wszystkie obrazy znalezione w katalogu ... pozwól mi sprawdzić, czy uda mi się to obejść ...
Zanna
@ user285884 edytowany, ale nie mogę wypracować eleganckiego rozwiązania :(
Zanna
1
ok, dzięki za wysiłek! co z tego, przeszukuję katalog w poszukiwaniu plików .cr2 i przenoszę je do osobnego folderu wywołującego cr2files. Zrobiłem to w jednym podfolderze przy użyciu mv * .cr2 ../cr2files/ i zadziałało !. Jednak jak to zrobić i określić, które pliki mają być przeglądane? Coś w stylu „hej Linux, spójrz na foldery 1-10 w poszukiwaniu plików .cr2 i przenieś go do folderu cr2files”? Dzięki Zanna
użytkownik285884
1
dobrze w pewnym kontekście, gdzie jestem. Zgubiłem kilka zdjęć. Zrobiłem więc zdjęcie i dostałem mnóstwo folderów, wystarczających do zapełnienia całego dysku twardego. Więc chcę zajrzeć do wszystkich folderów na dysku twardym, z wyjątkiem jednego, ponieważ ten ma mnóstwo plików .cr2, o których wiem, że nie są tymi, których szukam. Więc chcę, żeby Linux przeszedł przez wszystkie foldery oprócz jednego. Nie jestem pewien, czy twój kod to robi. Co robi? Również „-” po -v? Dzięki Zanna!
user285884,
1

Opcja 1 - Używanie, xargsgdy nazwy plików zawierają spacje

Jak wskazano poniżej, użycie back ticks(opcja 3 poniżej) zostanie przerwane, gdy nazwy plików będą zawierać spacje. Bezpieczniejsza metoda używania findpolecenia i przekazywania danych wyjściowych do shotwellużycia xargsopcji wygląda następująco:

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

-print0Flaga mówi znaleźć w użyciu \0(znak null) ograniczniki między nazwami, a -0flaga mówi xargssię spodziewać tych \0ograniczników.

Podziękowania dla doskonałych odpowiedzi znalezionych tutaj ( jak potokować listę plików zwróconych przez komendę find ) na przepełnieniu stosu.

Opcja 2 - Używanie, -execgdy nazwy plików zawierają spacje

Jak zauważa poniższy komentarz, -execopcja obsługuje również nazwy plików zawierające spacje. Inne poniższe komentarze wskazują, że przerwy te przekraczają liczbę plików. Wyglądałoby to tak:

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

Opcja 3 - Gdy w nazwach plików nie ma spacji

W dawnych czasach, zanim nazwy plików miały spacje i stały się 256 znakami, ta opcja działała dobrze. Ta opcja znajduje się na wielu innych stronach internetowych, ale nie należy jej używać . Wcześniej użycie findpolecenia i przekazanie danych wyjściowych shotwellbyło najprostszą metodą:

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

Zaczyna się findod bieżącego katalogu i obejmuje wszystkie podkatalogi:

  • Zwróć uwagę na użycie, back ticka nie pojedynczych cytatów 'powyżej. Używanie tykania wstecznego jest podobne do zamykania frazy w $(...)bash.
  • Pierwszy argument .podaje findpunkt początkowy, którym jest bieżący katalog. Możesz przekazać /home/$USER/Pictureslub coś innego zamiast ..
  • Drugi argument -namemówi find, aby szukał nazw plików (nie katalogów).
  • Ta technika działa na wszystkie polecenia, nie tylko shotwell. czyli można go używać do cat, head, taili większości innych popularnych komend Linux.
WinEunuuchs2Unix
źródło
Korzystanie z backticks jest trochę niezadowolone, a ponadto ma problemy z dzieleniem słów. Polecam go zmienić na rurze xargs i wykorzystywać -0wszystkie nazwy plików użyć łańcuchem pustym jako separatora
Sergiy Kolodyazhnyy
Problem z podejściem podanym w tej odpowiedzi polega na tym, że robi to źle, gdy dowolna z nazw plików lub nazw katalogów zawierających pliki mają spacje. Zauważ, że chociaż wiele osób woli $( )składnię zastępowania poleceń od składni zastępowania polecenia wstecz, nie ma to związku z tym problemem - obaj zawodzą dokładnie w ten sam sposób. @Erg Sugeruję opublikowanie nowej odpowiedzi na temat tego, jak to zrobić xargs. (Włączenie podstawienia " "również nie zadziałałoby: wszystkie findwyniki zostałyby przekazane jako pojedynczy argument.)
Eliah Kagan
Widziałem też xargsopcję włączoną Stack Overflowpodczas pisania tej odpowiedzi. Rozwijam się również z tą opcją. Niestety musiałem dziś rano uruchomić system Windows 8, aby naprawić uszkodzoną NTFSpartycję, więc testowanie było problematyczne. Zaktualizuję odpowiedź później. Dziękujemy za zwrócenie uwagi :)
WinEunuuchs2Unix
dlaczego nie po prostu użyć -exec?
Zanna
@Zanna Dodam też -execopcję :)
WinEunuuchs2Unix
-2

Nie wiedziałem, że shotwell nawet otworzył pliki RAW. Jestem pewien, że możesz uzyskać większy przebieg dzięki digikam lub darktable. Digikam jest wyposażony w niektóre komponenty Kde i jest całkiem dobrym menedżerem zdjęć. Darktable posiada bardzo dobre możliwości edycji nieniszczącej.

użytkownik114644
źródło
Można rozszerzyć tę odpowiedź (o edycji ing) zawierać szczegółowe informacje na temat korzystania z Digikam (lub Darktable), aby przeglądać tylko .cr2plików w folderze? Jeśli tak, to może być cenne, ponieważ oryginalny plakat miał problemy z dostaniem Shotwell pokazać tylko te .cr2pliki. Chociaż dodałem dodatkowe podejścia do mojej odpowiedzi, aby umożliwić korzystanie z Shotwell do przeglądania tylko tych plików i żadnych innych, raczej mocno podejrzewam, że Shotwell nie jest najlepszym narzędziem do tego.
Eliah Kagan