Команда time не выполняет то, что вы думаете. Фактически, поскольку его цель - рассчитать время выполнения другой команды, запускать ее без аргументов (без команды на время) не имеет особого смысла. (По-видимому, он все еще работает без жалоб!)
Конкретный эффект, который вы здесь видите, заключается в том, что time
выводит свою статистику по стандартной ошибке, а не по стандартному выводу (чтобы не мешать выводу что бы вы ни выбрали). Перенаправление стандартного вывода не влияет на стандартный канал ошибок. Попробуйте вместо этого:
time ls 2>time.txt
... где вы перенаправляете стандартную ошибку, а не стандартный вывод. Вывод ls
отображается как обычно (стандартный вывод не перенаправляется), но вывод time
при стандартной ошибке идет в файл, что, я думаю, вы пытались достигать.
Вот:
find ./ -type f -exec rm -f * {} \; 2> /dev/null
Если вы хотите сохранить нетронутыми даже файлы в ваших подкаталогах:
rm -f * 2> /dev/null
Вы можете просто отбросить сообщения об ошибках:
rm * 2>/dev/null
Это отбросит все ошибки. Если вы хотите видеть другие потенциальные ошибки, то можно поступить сложнее:
rm * 2>&1 | grep -v 'cannot remove .*: Is a directory'
В этом случае другие ошибки все равно будут записаны в журнал.
В zsh:
rm *(^/)
Другие оболочки не имеют эквивалента глобальных классификаторов zsh. Вместо этого вы можете вызвать find
, который способен различать файлы по типу, и указать ему, что не следует обращаться к подкаталогам, отличным от .
(начальный каталог).
find . -name . -o -type d -prune -o rm -f {} +
Это удаляет точечные файлы, тогда как *
не сопоставляет точечные файлы. Если вы хотите сохранить точечные файлы, скажите find
не вызывать rm
для них.
find . -name . -o -type d -prune -o ! -name '.*' rm -f {} +
(Вы можете использовать -mindepth
, -maxdepth
и -delete
, но только если вам не нужно, чтобы ваш сценарий выполнялся на системах, где find
не имеет этих опций. Опции, которые я использовал, являются переносимыми.)