Я пытаюсь обновить метку времени до текущего времени для всех файлов XML в моем каталоге (рекурсивно). Я использую Mac OSX 10.8.5.
Приблизительно для 300 000 файлов следующая echoкоманда занимает 10 секунд :
for file in `find . -name "*.xml"`; do echo >> $file; done
Однако следующая touchкоманда занимает 10 минут ! :
for file in `find . -name "*.xml"`; do touch $file; done
Почему эхо намного быстрее, чем прикосновение?
touch `find . -name "*.xml"` будет даже быстрее, чем оба из вышеперечисленного?
>>$file
touchвообще так много раз вызывать ? find . -name '*.xml' -print0 | xargs -0 touchвызывает touchнамного меньше раз (возможно, только один раз). Работает на Linux, должен работать на OS X.
echo >> $fileон добавит новую строку$fileи, таким образом , изменит ее. Я предполагаю, что это будет то же самое для OS / X. Если вы не хотите этого, используйтеecho -n >> $file.