2013-05-21 13 views

Odpowiedz

5
find <path> -name "*.png" | xargs -Irepl TMXResolutionTool repl <ratio> 

Jeśli trzeba uruchomić wszystkie te polecenia, aby na każdego pliku przed przejściem do następnego, mały skrypt bash może być wyraźniejszy

find <path> -name "*.png" | while read f ; do 
TMXResolutionTool $f <resize ratio> ; 
TMXResolutionTool $f <resize ratio> ; 
TMXResolutionTool $f <new width> <new height> ; done 
+0

Dziękuję, super. – Eyeball

13

myślę, że for/do pętla jest wyraźniejszy i prawdopodobnie niewiele szybciej niż find plus xargs. Zakładając, że używasz domyślnej powłoki, bash, na OS X, ogólnej formie polecenia, jeśli chcesz zrobić to jako jedną wkładką jest:

for f in <files>; do <somecommand> $f; done 

gdzie <files> to wyrażenie, którego wynikiem listy plików (zwykle rozszerzenie ze znakami wieloznacznymi), <somecommand> to wiersz poleceń, który ma zostać wykonany dla każdego pliku, a następnie $f rozwija się do każdego pliku po kolei w postaci <files>. Więc chcesz wpisać coś takiego:

for f in myfolder/*; do TMXResolutionTool $f <otherparameters> ; done 

Można również uruchomić wiele poleceń wewnątrz pętli na tej samej linii, tylko przez łańcuchowym je średnikami. Dlatego, jeśli pytanie oznacza, że ​​chcesz uruchomić TMXResolutionTool trzykrotnie na temat każdego pliku w sekwencji o różnych parametrach:

for f in myfolder/*; do TMXResolutionTool $f <otherparameters>; TMXResolutionTool $f <differentparameters>; TMXResolutionTool $f <yetmoredifferentstuff>; done 

Nawiasem mówiąc, to wszystkie podstawowe bash sztuczki powłoki; nie jest to specyficzne dla OS X. Każda książka na temat bash powie ci to wszystko i więcej (chociaż jeśli chcesz poznać wiersz poleceń z perspektywy Maca, polecam książkę O'Reilly Learning Unix for OS X Mountain Lion).

Powiązane problemy