Как переименовать файлы случайным образом - PullRequest
0 голосов
/ 06 мая 2019

здесь у меня есть файлы изображений с именами 1 (1) .jpg, 1 (2) .jpg, 1 (3) .jpg ..... я хочу переименовать эти файлы с помощью задания кукурузы в linux, используя .sh файлычисло внутри скобки () должно быть изменено, а остальные должны оставаться такими же

для примера

до переименования 1 (1) .jpg после переименования 1 (2) .jpg

и предыдущий 1 (2) .jpg следует переименовать в любое другое число 1 (x) .jpg: x - это значение, при котором изменение и количество файлов должны быть одинаковыми и без перезаписи

Как я могу это сделать

Я просто переименую их в обычном порядке

Ответы [ 3 ]

0 голосов
/ 06 мая 2019

Я бы сделал это:

  1. создать временный каталог tmpdir
  2. получить список существующих файлов в массиве source
  3. перетасовать массив в другой массив dest
  4. для каждого индекса исходного массива: mv "${source[i]}" "$tmpdir/${dest[i]}"
  5. затем переместите все файлы из tmpdir в текущий каталог.
0 голосов
/ 06 мая 2019

Не идеально эффективно.Предложения приветствуются.
Это подразумевает только однозначную цифру, а эффективность снижается по мере того, как появляется больше, поскольку должна быть какая-то неиспользуемая цифра, но она выбирается случайным образом и не кэширует пропуски зажигания.

printf "%s\n" "1 ("?").jpg" |
while IFS=')(' read a b c
do n=$(($RANDOM%10))
   while [[ -e "$a($n)$c" ]]
   do n=$(($RANDOM%10))
   done
   mv "$a($b)$c" "$a($n)$c"
done

Этабудет более эффективным, но не случайным, предпочитая самые низкие доступные слоты.

for ndx in {0..9}
do [[ -e "1 ($ndx).jpg" ]] && used[$ndx]=1 || used[$ndx]=0
done

printf "%s\n" "1 ("?").jpg" |
while IFS=')(' read a b c
do for ndx in {0..9}
   do if (( used[$ndx] ))
      then continue
      else mv "$a($b)$c" "$a($ndx)$c"
           used[$b]=0
           used[$ndx]=1
           break
      fi
   done
done
0 голосов
/ 06 мая 2019

Это не совсем случайно, но, возможно, достаточно для вас:

n=1; for i in 1\ \(*.jpg; do : $((n+=$RANDOM%5 + 1 )); echo mv -i "$i" "1 ($n).new.jpg"; done

(Выполните сначала с помощью echo, затем пропустите 'echo', если вы удовлетворены результатом. Затем, при желании, переименуйте, удалив ".new".)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...