Как я могу удалить каталоги на основе их числового значения имени с помощью сценария оболочки? - PullRequest
1 голос
/ 17 февраля 2012

У меня есть каталог, который содержит подкаталоги с числовым именем (например, 1, 2, 3, 32000, 43546). Мне нужно удалить все каталоги по определенному номеру. Например, мне нужно удалить все подкаталоги, имя которых численно больше 14234. Можно ли это сделать одним действием командной строки?

rm -r /directory/subdirectories_over_14234 ( how can I do this? )

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012

В bash я бы написал

for dir in *; do [[ -d $dir ]] && (( dir > 14234 )) && echo rm -r $dir; done

Удалите echo на ваше усмотрение.

2 голосов
/ 17 февраля 2012

Ну, вы можете выполнить команду bash for loop, чтобы выполнить итерацию по имени файла каталога и затем использовать команду test после извлечения целевого числа из имени файла.

Должно быть что-то вроде этого:

for $file in /your/path 
do
   #extract number here with any text processing command (ed ?)
   if test [$name -leq your_value]
   then
      rm -R $file
   fi
done
1 голос
/ 17 февраля 2012

Вы не упоминаете, какую оболочку вы используете.Я использую Zsh , и у него есть очень крутая функция: он может выбирать файлы на основе чисел так, как вы хотите!Таким образом, вы можете сделать

$ rm -r /directory/<14234->(/)

, чтобы выбрать все подкаталоги /directory с числовым значением более 14234.

Как правило, вы используете

<a-b>

длявыберите пути с числовыми значениями между a и b.Вы добавляете (/) только к каталогам .Используйте (.) для сопоставления только файлов .Шаблоны glob в Zsh очень мощные и могут в основном (если не всегда) заменять старую добрую команду find.

...