суббота, 6 июля 2013 г.

Удаление большого количества файлов в директории

Вроде бы - такая мелочь, правда? Удалить миллион-другой мелких файлов в директории.

На самом деле, кто сталкивался, тот знает - не совсем мелочь.

На некоторых UNIX-подобных системах есть грязный хак с unlink - правда, работает не везде и только, как правило, на более-менее канонических реализациях UFS. На ZFS, например, уже не прокатит.

Не прокатывает и на JFS2 IBM AIX:

user oracle /oracle/admin/onyma >  id
uid=0(root) gid=0(system) groups=2(bin),3(sys),7(security),8(cron),10(audit),11(lp) user oracle /oracle/admin/onyma > unlink udump
unlink: Not owner

Причем попытка любых вариантов удаления - не прокатывает по причине системных ограничений юниксовых шеллов и утилит:

user oracle /oracle/admin/onyma/bdump > find . -name *.trc -exec rm {} \;
-bash: /usr/bin/find: Arg list too long

Простой rm *.trc тоже не работает, кстати.

А удалить, тем не менее, надо. Причем, желательно, не трогая систему серьезно.

Сдаетесь?

Все просто:

user oracle /oracle/admin/onyma/bdump > find . |xargs rm
rm: cannot remove '.' or '..'
user oracle /oracle/admin/onyma/bdump > ls -al
total 0
drwxr-xr-x    2 oracle   dba             256 Jul  6 17:05 .
drwxr-xr-x    9 oracle   dba             256 Apr 13 19:15 ..

Решение выделено жирным.

Проверено на кошечках.