Удалите весь файл кроме нескольких, регистрируют командой

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

Сегодня 15.10.2019, и мои файлы:

...
field_20191012152850.php
field_20191013022128.php
field_20191014095433.php
field_20191015101257.php

Имена файлов содержат 4 раздела. Первый раздел является "полем _ ", вторая часть является датой (например, 20191014 = 14.10.2019), третья часть время (например, 231241 = 23:12:41), и Четвертая часть" .php".

Мы можем удалить те файлы информацией о файле, например, датой и временем поколения файла или именем файла, например, "field_20191014095433.php".

Я могу удалить сегодня файлы следующей командой:

rm field_$(date +%Y%m%d)[0-9]{6}.php

Но я хочу удалить все файлы кроме сегодня файлов информацией о поколении файла или именем файла. Мы можем также использовать файл удара вместо короткой команды.

1
задан 15 October 2019 в 14:58

2 ответа

Можно сделать это с find:

find /path/to/folder -type f -not -name "field_$(date +%Y%m%d)*.php" -delete

Это будет рекурсивно искать /path/to/folder файлы соответствия.

, Если Вы только должны найти для нахождения файлов в /path/to/folder, не ища в его подкаталогах, просто добавляют эти -maxdepth -1 флаг:

find /path/to/folder -maxdepth 1 -type f -not -name "field_$(date +%Y%m%d)*.php" -delete
0
ответ дан 7 December 2019 в 14:57

Можно использовать extglob для исключения шаблона:

shopt -s extglob
rm field_!($(date +%Y%m%d)*).php

Вы могли бы хотеть выключить extglob впоследствии с помощью shopt -u extglob.

См. также

1
ответ дан 7 December 2019 в 14:57

Другие вопросы по тегам:

Похожие вопросы: