#linux #bash
Вопрос:
Учитывая файлы 0..9.txt
в каталогах foo
и bar
, как я могу удалить те, которые являются нечетными?
Я придумал
find . -regextype egrep -regex ".*[0-9].txt" | while read file; do [ `expr match "$file" '[0-9]'`% 2 -eq 0 ] amp;amp; rm -v "$file" ; done
Но это не работает. Я не понимаю, как правильно настроить поиск числа в полном имени файла и проверить его четность.
Комментарии:
1. Каковы примеры нескольких добавленных имен файлов?
2. анубхава, я думаю, что под «нечетным» ОП подразумевает нечетное число (в отличие от четного). Не странно в смысле необычного.
3. этого должно хватить
".*[13579].txt"
4. Кажется
find . -name '*[13579].txt'
, этого достаточно. Нет необходимости выполнять регулярное выражение.5. Гораздо легче решать проблемы, если вы попытаетесь разбить их на части и вместо этого решить отдельные части. Если вы попробуете части вашего скрипта сами по себе, вы увидите, что
expr match file42.txt '[0-9]'
не выводится 42 и[ 2%2 -eq 0 ] amp;amp; echo "even"
не выводится «даже».
Ответ №1:
find . -name '*[13579].txt' -delete
Если вы find
не поддерживаете -delete
, используйте:
find . -name '*[13579].txt' -exec rm {} ;
или
find . -name '*[13579].txt' -exec rm {}
Ответ №2:
find . -regextype egrep -regex ".*[0-9].txt" |
while read file; do
n=$(basename $file .txt);
if [[ $((n % 2)) == 1 ]]; then
rm -v $file;
fi;
done