Możesz użyć identify
z imagemagick
i możesz użyć następującego polecenia:
find . -iname "*.jpg" -type f -exec identify -format '%w %h %i' '{}' \; | awk '$1<300 || $2<300'
użycie -exec <command> '{}' \;
powoduje, że twoja nazwa pliku może zawierać spacje, alternatywnie możesz użyć
find . -iname "*.jpg" -type f | xargs -I{} identify -format '%w %h %i' {} | awk '$1<300 || $2<300'
gdzie -I{}
dba o to samo.
Podoba mi się identify
to, że możesz określić format wyjściowy; w tym przypadku, '%w %h %i'
który podaje szerokość, wysokość i pełną nazwę ścieżki obrazu. Następnie awk
wyrażenie zachowuje tylko te linie, dla których obraz jest mniejszy niż pożądany rozmiar.
Przykład wyniku:
64 64 ./thumbsup.jpg
100 150 ./photomin.jpg
Edycja: Jeśli chcesz tylko nazwy plików (dla rurociągów do rm
na przykład), wystarczy zmienić $line
w awk
oświadczeniu $3
, to będzie drukować tylko trzecią kolumnę.
| awk '$1<300||$2<300'
lub| awk '$1<300||$2<300{print $3}'
(gdy potrzebna jest tylko trzecia kolumna).'%w %h %i\n'
), aby działał dla mnie.| xargs -I {} mv {} /destination/directory/
Myślę, że zaakceptowana odpowiedź jest bardzo dobra, ale chciałem dodać inne możliwe rozwiązanie ...
Chociaż
ImageMagick
teraz najczęściej używam narzędzi, jestemnetpbm
starym przyjacielem do przetwarzania obrazów. Możesz zobaczyć rozmiar dowolnego formatu obrazu za pomocą polecenia:To wygeneruje dane wyjściowe, które wyglądają następująco:
Aby odpowiedzieć na pytanie „co następuje po potoku?”, Używam
while read
częściej niż używam,xargs
ponieważ jest bardziej elastyczny. Mojanetpbm
odpowiedź na pytanie wygląda następująco:źródło
To działało dla mnie:
To jest próbka wyjściowa:
./2520161636481000.png 75x75
./2620160819191100.png 75x75
./2420181545550700.png 75x75
źródło
identify
Komenda zimagemagick
pakietu robi to, co chcesz:Ponownie musisz użyć,
grep
aby uporządkować rozmiar obrazu.Podejrzewam jednak, że jeśli nie masz bardzo szerokiego zakresu rozmiarów obrazów, łatwiej byłoby po prostu
find
usunąć pliki JPEG poniżej określonego rozmiaru:(Warto uruchomić bez
-delete
sprawdzenia, czy nie znajduje rzeczy, które chcesz zachować - inaczej nie wyświetli monitu przed usunięciem).źródło