2

Я хочу удалить все файлы в каталоге, в котором я сейчас нахожусь, которые были созданы сегодня.

Поэтому, если сегодня 3 апреля, то запрашиваемая мной UNIX-утилита удалит someFile2, someFile3, someFile4 и someFile5. Эта команда не удалит someFile1.

someUser@:/someDirectory$ ls -lrt
-rw-r--r--    1 someUser someUser       4242 Mar 30 12:12 someFile1.dat
-rw-r--r--    1 someUser someUser          0 Apr 03 12:12 someFile2.dat
-rw-r--r--    1 someUser someUser   42424242 Apr 03 12:12 someFile3.dat
-rw-r--r--    1 someUser someUser          0 Apr 03 12:12 someFile4.dat
-rw-r--r--    1 someUser someUser     424242 Apr 03 12:12 someFile5.dat

Моя ОС AIX.

В настоящее время я выполняю следующие четыре команды снова и снова, чтобы добиться этого, и это занимает много времени, потому что я тестирую и мне нужно часто удалять эти файлы. Имена файлов всегда разные (временные метки используются в реальных именах файлов).

rm someFile2.dat
rm someFile3.dat
rm someFile4.dat
rm someFile5.dat

2 ответа2

1

Вы можете использовать два разных подхода к ответу на этот вопрос:

  • Вы говорите, что имена файлов содержат метку времени. Вы можете удалить файлы из каталога, используя комбинацию подстановочных знаков и метки времени: $ TODAYDATE=`date '+%Y%m%d'` $ rm *${TODAYDATE}.dat

  • Вы можете использовать find с опцией -newer (вы должны использовать новую опцию, так как встроенная find AIX в не так много вариантов):Сначала создайте файл , который имеет время начала с моментом , когда вы хотите найти , как время изменения : $ TODAYDATE=`date '+%Y%m%d'` $ touch -m -t "${TODAYDATE}0000" /tmp/time_marker Найти файлы, которые являются более новыми, чем этот файл $ find . -type f -newer /tmp/time_marker -exec rm {} \;

  • Вы также можете использовать более простую версию find : $ find . -type f -ctime -1 -exec rm {} \;

Это найдет все файлы, сделанные за последние 24 часа. Полезно, если вы запускаете работу cron около 23:59 каждый день. Тем не менее, это не совсем отвечает на ваш вопрос.

0

Если вы можете использовать GNU findutils на машине, то лучшим вариантом будет эта команда для удаления файлов в текущем каталоге:

find -maxdepth 1 -daystart -ctime 0 -type f -delete

Эта команда покажет вам, что будет удалено:

find -depth -maxdepth 1 -daystart -ctime 0 -type f -exec ls -cld {} +

Ограничившись командой find из AIX, вы можете легко удалять файлы за последние 24 часа:

find -maxdepth 1 -ctime 0 -type f -exec rm {} \;

К сожалению, утилита find в AIX не имеет опции -daystart которая заставляет сравнивать время с границей дня вместо текущего времени.

Фактически, ctime - это время модификации inode (не время создания), но это самое близкое приближение времени создания в стандартных атрибутах файла UNIX.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .