2012-10-11 7 views
8

Mam zdjęcia w wielu katalogach. Chcę używać jpegtran (narzędzie wiersza poleceń) do recursivly przejść przez każdego z nich, zoptymalizować go i zapisz go (nadpisać)Jak rekursywnie używać JpegTran (wiersza poleceń), aby zoptymalizować wszystkie pliki w subdirach?

jeśli wszystkie są w jednym folderze Używam tego

for JPEG in *.jpg ; do jpegtran -optimize $JPEG > $JPEG; done 

ale nie można uzyskać działającego rekurencyjnie i nadpisywania tego samego pliku (a nie nowej nazwy pliku)

żadnych wskazówek?

Odpowiedz

5

Jak o użyciu polecenia find:

find /your/dir -name '*.jpg' -exec echo jpegtran -optimize {} \; 

uruchomić polecenie, jeśli chcesz wyjście, usunąć echo, aby go wykonać.

+0

jpegtran ma domyślne wyjście na standardowe wyjście. –

3

Zwykle jest to dużo łatwiejsze w użyciu znaleźć w takich przypadkach, ponieważ to, co chcesz zrobić, to akt na kilku nazwach plików. Narzędzie znajdź poda te nazwy. Zakładając, że masz narzędzia GNU (a może nawet BSD), poniższy przykład ilustruje ten typowy scenariusz.

Na przykład:

$ find ~/images/wallpapers/TEMP/ -type f -iname '*jpg' \ 
    -exec sh -c 'jpegtran -outfile {}.out -optimize {}; mv {}.out {} ' \; 
  1. znaleźć wyszukuje wszystkie pliki o rozszerzeniu: JPG w folderze Temp, rekurencyjnie.
  2. Dla każdej ścieżki pełny plików stwierdzono (oznaczonej `{} '), znaleźć będzie działał z polecenia udzielonego -exec
  3. z -exec kody opcyjne i biegnie kilka poleceń zamiast jednego przez sh

Uwagi

cat file > file nie jest dozwolone, ponieważ jednocześnie Rea ding od, i pisanie do tego samego pliku nie jest dobrze zdefiniowaną lub nawet obsługiwaną operacją w bash.

22

jpegtran whole directory

find /the/image/path -name "*.jpg" -type f -exec jpegtran -copy none -optimize -outfile {} {} \; 
+0

Oups down głosował przez błąd –

+0

noooooooooo !!! ;) – Bas