Я пытаюсь переименовать файлы в огромную папку изображений, которая содержит много подпапок и внутри них изображения.Рекурсивно переименовать коллекцию изображений с подпапками
Что-то вроде этого:
ImageCollection/
January/
Movies/
123123.jpg
asd.jpg
Landscapes/
qweqas.jpg
February/
Movies/
ABC.jpg
QWY.jpg
Landscapes/
t.jpg
И я хочу, чтобы запустить сценарий и переименовать их в порядке возрастания, но не держать их в соответствующей папке, например:
ImageCollection/
January/
Movies/
0.jpg
1.jpg
Landscapes/
2.jpg
February/
Movies/
3.jpg
4.jpg
Landscapes/
5.jpg
До сих пор у меня есть следующее:
#!/usr/bin/env bash
x=0
for i path/to/dir/*/*.jpg; do
new=$(printf path/to/dir/%d ${x})
mv ${i} ${new}
let x=x+1
done
Но моя проблема заключается в том, что мы не в состоянии сохранить файл es в их соответствующих подпапках, вместо этого все перемещается в корневую папку path/to/dir
.
Используйте команду find, получите список всех файлов (найдите свою папку для поиска | grep "\ .jpg $"), предоставит вам список. Используйте для цикла (со счетчиком, начинающимся с 0), и начните делать shenzi (mv $ {file} $ (dirname $ {file})/$ counter.jpg). Последняя строка для цикла будет ((counter ++)). –