Próbuję zaktualizować znacznik czasu do bieżącego czasu we wszystkich plikach xml w moim katalogu (rekurencyjnie). Używam Mac OSX 10.8.5.
W przypadku około 300 000 plików następujące echo
polecenie zajmuje 10 sekund :
for file in `find . -name "*.xml"`; do echo >> $file; done
Jednak następujące touch
polecenie zajmuje 10 minut ! :
for file in `find . -name "*.xml"`; do touch $file; done
Dlaczego echo jest tutaj znacznie szybsze niż dotyk?
touch `find . -name "*.xml"`
byłoby nawet szybsze niż oba powyższe?
>>$file
touch
co w ogóle wywoływać tyle razy? find . -name '*.xml' -print0 | xargs -0 touch
wywołuje touch
znacznie mniej razy (być może tylko raz). Działa na systemie Linux, powinien działać na systemie OS X.
echo >> $file
doda nowy wiersz$file
i tym samym go zmodyfikuje. Zakładam, że będzie tak samo dla OS / X. Jeśli tego nie chcesz, użyjecho -n >> $file
.