для применения счетчиков к каталогам внутри папки

Finalmente encontré una manera de resolverlo. Usé la utilidad de copia de seguridad gratuita llamada testdisk. Está disponible tanto para windows como para linux. Lo usé para hacer una copia de seguridad de mis datos del disco duro. Luego usé el administrador de particiones para eliminar la partición completa. Y por fin creó la nueva partición. Ahora funciona bien.

0
02.07.2019, 22:16
1 ответ

В зш:

set -- dir_0.0.1_*(oe['REPLY=${REPLY##*_}']n[-1])
mv dir_0.0.1 dir_0.0.1_$(( ${1##*_} + 1 ))

Это устанавливает позиционные параметры (, используя только $1здесь )для расширения подстановочного знакаdir_0.0.1_*(oe['REPLY=${REPLY##*_}']n[-1]):

  • имена файлов должны начинаться сdir_0.0.1_
  • имена файлов затем oупорядочиваются (сортируются )с последующим e[... ]выражением, которое
  • устанавливает ключ сортировки для части имени файла, полученной в результате удаления как можно большего количества начальных символов до последнего _подчеркивания
  • отсортировано nпо цифрам
  • список имен файлов затем разрезается, чтобы вернуть последний элемент([-1])

Имя файла с наибольшим текущим индексом теперь находится в $1. Это число снова извлекается внутри числового расширения $(( ))(путем удаления начальных символов до _), затем добавляется один и добавляется статический префикс.

В bash я просматривал имена файлов и вручную сравнивал индексы:

# safe starting point
greatest=-1
for d in dir_0.0.1_*; do n=${d##*_}; [ "$n" -gt "$greatest" ] && greatest=$n; done
mv dir_0.0.1 dir_0.0.1_$(( greatest + 1))

Разбивка цикла bash (sh -совместима, на самом деле):

  • мы начнем с установки предположительно -безопасной начальной точки для индекса --что-то, что гарантированно будет ниже, чем все, что мы найдем
  • использовать цикл forс подстановочным знаком для выбора существующих имен каталогов; для каждого из этих каталогов:
  • захватить индекс в конце, удалив все, начиная с начала до последнего символа подчеркивания
  • проверить этот индекс, чтобы убедиться, что он больше текущего наивысшего индекса; если да, сбросьте самый высокий индекс
  • после завершения цикла переименуйте каталог, как указано выше,добавив значение «самое высокое + 1»

Другим вариантом является перебор -принудительного цикла по индексам до тех пор, пока не будет найден неиспользуемый:

# set this to something you know exists
index=1
while [ -e dir_0.0.1_"${index}" ]; do index=$((index + 1)); done
mv dir_0.0.1 dir_0.0.1_"${index}"

Это увеличивает $indexдо тех пор, пока каталог с соответствующим -именем не не не существует. Затем мы используем этот неиспользуемый номер для переименования.

1
28.01.2020, 02:39

Теги

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