2013-02-20 3 views
0

Мне очень жаль, если об этом уже ответили - я не мог его найти.Как удалить каждый N-й файл в терминале Mac?

У меня есть справочник с ок. 35000 файлов. Для каждого файла есть две копии. Они все названные в последовательности, например, так:

0000001, 0000002 и т.д.

В приведенном выше примере исходные файлы будут названы 1, 4, 7, 10 и т.д.

Как я удалить все файлы, кроме оригиналов?

ответ

0

Насколько я понимаю, терминал Mac использует bash как оболочку. Следующая команда оболочка удаляет файлы, которые вы хотите (все, кроме 1,4,7,10 и т.д.): Я предполагаю, что файлы пронумерованы 000number.ext

shopt -s extglob; for file in [0-9]*; do number=${file%%.ext}; number=${number##+(0)}; if ((number%3 != 1)); then rm $file; fi; done 

Некоторые комментарии: ${file%%.ext} удаляет расширение из файл с использованием специального синтаксиса bash для удаления суффикса из строки. Если ваши файлы не имеют расширения, вы должны удалить эту команду.

${number##+(0)} удаляет ведущие нули из числа (в противном случае число будет обрабатываться как восьмеричное по оболочке). Для этого необходимо установить опцию extglob (начиная с shopt -s extglob перед основным скриптом).

((number%3 != 1)) действителен только для чисел 1,4,7,10, (что дает остаток 1 при делении на 3).

Предлагаю вам сначала проверить, используя echo вместо rm перед запуском этого с помощью rm, чтобы убедиться, что все как ожидается.