Jak usunąć „nieużywane” nieprzetworzone pliki, które nie pasują do formatu .jpg?


10

Fotografuję RAW + JPG, a mianowicie NEF i JPG. Po obejrzeniu czasami setek zdjęć (przy użyciu prostego programu) i usunięciu plików JPG mam wiele niepotrzebnych plików NEF. Jeśli w katalogu byłby skrypt do usuwania osieroconych plików NEF, byłoby to bardzo pomocne. Przeczytałem tutaj podobne pytanie „ Jak usunąć pliki JPG, ale tylko jeśli istnieje zgodny plik RAW? ”, A rozwiązanie przedstawione w wierszu polecenia działa bardzo dobrze. Zastanawiałem się, czy jedna z nich była dostępna w moim położeniu?


Czy możesz podać tutaj link do tego pytania? Odpowiedzią na to będzie prawie na pewno skrypt powłoki - może zamiast tego zapytaj SuperUser, ponieważ jeśli masz dobrą definicję tego, co musisz usunąć (według nazwy pliku), jest to dość trywialne zadanie.
— Ben Parsons,

1
W przyszłości skorzystaj z Geeqie. Automatycznie usuwa pasujące pliki RAW i wszystkie inne, które są zdefiniowane jako plik „sidecar” na podstawie konfiguracji.
— Itai

Mam konfigurację w następujący sposób: NEF: \\ Zdjęcia \ RAW \ RRRR \ RRRR-MM-DD \ original.nef Jpegs: \\ Zdjęcia \ RAW \ RRRR \ RRRR-MM-DD \ original.jpeg W każdym razie mogę to zastosować skrypt do tego?

W Bash: sierota = .nef; rodzic = .jpeg; dla f w * „$ sieroce”; do F = „$ {f% $ sierota} $ rodzic”; jeśli test! -f „$ F”; następnie echo „Zidentyfikowany sierota: $ f istnieje, ale nie $ F”; fi gotowe Nie mogę uwierzyć, jak długie i skomplikowane są te inne odpowiedzi. Tak, wiem, odpowiadając w komentarzu, ale jest chroniony ...
— Nikt

Odpowiedzi:


9

Napisałem skrypt w Pythonie, aby wykonał za mnie pracę. Nazywa się remove-orphaned-raw-images.pyi opublikowałem go na Github .

Zasadniczo iteruje wszystkie pliki w danym folderze i przenosi osierocone surowe obrazy (w moim przypadku *.CR2pliki bez pasującego JPEG) do folderu kopii zapasowej. Opcjonalnie możesz nakazać skryptowi, aby faktycznie usunął pliki.

Oto zarys algorytmu:

  • Uzyskaj listę wszystkich plików w wybranym katalogu.
  • Posortuj te pliki do plików RAW i JPEG (dołącz je do osobnych list).
  • Sprawdź, czy dla każdej pozycji na liście zdjęć RAW istnieje zgodność na liście JPEG;
    jeśli nie, dołącz ten obraz do listy osieroconych obrazów surowych.
  • Przenieś obrazy z listy osieroconych obrazów do folderu kopii zapasowej
    (lub usuń je bezpośrednio, jeśli jest to wyraźnie wymagane).

Narzędzie powie ci, jak go używać, gdy jest uruchamiany z opcją pomocy -hw wierszu poleceń.

Ten problem również mi się przydarzył i dlatego napisałem to narzędzie. Używam mojej lustrzanki do robienia zdjęć JPEG lub RAW + JPEG, nigdy tylko RAW. Podczas sortowania rozmytych lub w inny sposób złych ujęć używam plików JPEG, aby szybko na nie spojrzeć i usunąć te złe. Pozostają mi zdjęcia RAW, z których usunąłem pasujące pliki JPEG (z jakiegoś powodu).


5

Korzystając z pytania, o którym wspomniałeś - napisałem ci skrypt

ok ostrzeżenie! bądź ostrożny z tym skryptem! - Zrób kopię zapasową

1) Utwórz plik nietoperza o nazwie clean.bat i umieść go w katalogu, z którym chcesz pracować

2) Następnie wprowadź następujące dane do pliku nietoperza

mkdir keep
for /f "delims==" %%r in ('dir /b *.jpg') do move "%%~dpr%%~nr.nef" "%CD%\keep\" 2> nul
move *.jpg "%CD%\keep\"
del *.nef
del *.jpg
move "%CD%\keep\*.*" "%CD%\"
rmdir keep

3) Otwórz wiersz polecenia jako administrator i przejdź do folderu z plikiem clean.bat 4) uruchom clean.bat

Zasadniczo przepływ skryptu jest

  • Utwórz katalog o nazwie Keep
  • Przenieś wszystkie pasujące pliki NEF do folderu zachowaj
  • Przenieś wszystkie pliki JPEG do folderu Keep
  • Następnie usuń wszystkie pliki z folderu źródłowego
  • Przenieś zachowaj pliki z powrotem
  • Usuń folder zachowania

PROSZĘ przetestować to!

AKTUALIZACJA: Zmieniono skrypt do pracy z folderami, w których są spacje


2
+1 za proste rozwiązanie za jednym strzałem! Potrzebowałem tego rozwiązania od dłuższego czasu. Kiedyś opracowywałem polecenia, wklejając dane wyjściowe DIR do programu Excel i używając skomplikowanych operatorów, takich jak vlookup, do generowania poszczególnych poleceń, ale to zaspokaja prawie wszystkie moje potrzeby. Przetestowałem skrypt i jest dla mnie całkowicie w porządku. Musiałem zapoznać się z kilkoma referencjami, aby w pełni zrozumieć skrypt i móc go zmodyfikować dla innych podobnych operacji.
— Jahaziel

Fantastycznie, oszczędziłeś mi godzin żmudnej pracy !!! Próbowałem kilka razy i działa zbyt szybko. Właśnie tego szukałem.
— Al H

@ al-h - czy możesz zaznaczyć poprawne? dzięki
— Rob

Rob Nie jestem pewien, co rozumiesz przez „proszę zaznaczyć poprawne” Nie widzę gdzieś, gdzie mogę sprawdzić poprawny link.
— Al H

Jedną rzecz zauważyłem. To nie działa na folderach na pulpicie (usuwa wszystkie pliki jpg i NEF), więc najpierw przetestuj. Korzystam z systemu Windows XP Pro.
— Al H

1

Oto mój skrypt Pythona, aby usunąć cr2 w / oa jpeg.

Przeszukuje rekurencyjnie w bieżącym katalogu „.”. Uwzględnia wszystkie obrazy we wszystkich folderach.

import os 
import sys

#Searches through the current directory, recursively, looking for any raw
#and jpeg files. It enumerates the jpegs it finds, without the extension, and
#then enumerates the raw files it finds. If it finds a raw file for which no
#jpeg exists, then it deletes the raw file.
#
# This WILL NOT WORK, if there are files with repeated file numbers.
# this will NOT be an issue if there's only one camera. 

# A dict of filename: (rawpath, jpegpath)
files_seen = {}

for (cur_dir, subdirs, files) in os.walk("."):
  for file in files:
    fname, fext = os.path.splitext(file)
    fext = fext.lower()



    if (fext == ".jpg"):
      content = files_seen.setdefault(fname, [None, None])
      # if it is then filenames have du'ped
      assert(content[1] is None)
      content[1] = os.path.join(cur_dir, file)

    elif (fext == ".cr2"):
      content = files_seen.setdefault(fname, [None, None])
      assert(content[0] is None)
      content[0] = os.path.join(cur_dir, file)

#at the end, we look for raw files without a jpeg,

for key in files_seen:
  (raw_path, jpeg_path) = files_seen[key]

  if jpeg_path is None:
    print("Deleting: %s" % raw_path)
    #os.system("pause.exe")    
    os.unlink(raw_path)

print("Done")
os.system("pause.exe")

Po prostu zmień nazwę „.cr2” na „.nef”
— Peter pete

Nie znam Python, ale widzę, że w ostatnim wierszu odnosi się do „pause.exe”. Czy to oznacza, że ​​działa tylko w systemie Windows? Myślałem, że Python był niezależny od platformy.
— Saaru Lindestøkke

Dzień Program pause.exe wstawiłem tylko po to, aby Python nie zniknął, gdy tylko zakończy działanie, po dwukrotnym kliknięciu go w Eksploratorze. Możesz usunąć tę linię i voila będzie niezależna od platformy. Używanie rzeczy zależnych od systemu operacyjnego jest złą praktyką, a ponieważ początkowo napisałem to dla siebie, byłem leniwy: D Przynajmniej nie łączyłem ścieżek z naiwnymi ukośnikami ani nie korzystałem z funkcji usuwania plików specyficznych dla systemu operacyjnego.
— Peter pete

Jest także napisany dla wersji Python 3.x. Jeśli chcesz, aby był przyjazny dla systemu 2.x, po prostu zmień cały druk („coś”), aby wydrukować „coś”
— Peter Pete,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.