Нахождение имени файла образа и переименование с родительскими именами папок

У меня есть эта файловая структура. Я хотел использовать имя файла образа, добавленное с родительскими именами папок.

Прежде:

├── ak
│  ├── adak
│  │  ├── Hello\ World456
│  │  ├── cup-printing
│  │  │  └── Tshirt-printing.jpg
│  │  ├── hello-\ world789
│  │  ├── hello-world79
│  │  └── tshirt\ printing
│  │  └── Tshirt-printing.jpg
│  ├── akhiok
│  │  ├── Hello\ World456
│  │  ├── cup-printing
│  │  │  └── Tshirt-printing.jpg
│  │  ├── hello-\ world789
│  │  ├── hello-world79
│  │  └── tshirt\ printing
│  │  └── Tshirt-printing.jpg

Здесь родительские имена папок являются ak, Адаком.

Ak = состояние называют Адак = название города.

После того, как это должно быть похожим на это..

После:


├── ak
│  ├── adak
│  │  ├── Hello\ World456
│  │  ├── cup-printing
│  │  │  └── Tshirt-printing-adak-ak.jpg
│  │  ├── hello-\ world789
│  │  ├── hello-world79
│  │  └── tshirt\ printing
│  │  └── Tshirt-printing-adak-ak.jpg
│  ├── akhiok
│  │  ├── Hello\ World456
│  │  ├── cup-printing
│  │  │  └── Tshirt-printing-akhiok-ak.jpg
│  │  ├── hello-\ world789
│  │  ├── hello-world79
│  │  └── tshirt\ printing
│  │  └── Tshirt-printing-akhiok-ak.jpg

Команда Bash может помочь здесь?

Любая справка высоко ценится.

Заранее спасибо. :)

-1
задан 23 September 2019 в 16:53

2 ответа

С perl-переименовывают (sudo apt install rename):

rename -n 's/(.+)\/(.+)\/.+\/[^.]+/[110]amp;-$2-$1/' ak/*/*/*.jpg

Эта команда должна быть запущена в ak ’s родительский каталог. Это s замены путь вплоть до дополнительной точки с собой сопровождаемый вторым и затем первым именем каталога, каждый разделенный с дефисами. С -n это просто печатает то, что это хочет сделать, удалите эту опцию выполнить переименование.

Объяснения

  • s/a/b/ †“замена a с b
  • (.+)\/ соответствия по крайней мере один символ, сохраняющий его в группе и наклонной черте /, которого нужно оставить с обратной косой чертой \
  • .+\/ то же, не сохраняя его в группе †“мы, don’t нужен третий каталог снова
  • [^.]+ соответствия по крайней мере один символ, который не является точкой †“, это соответствует любому имени файла до первой точки (обратите внимание, что это означает Вас, can’t имеют любые другие точки в Вашем имени файла, чем просто дополнительная точка!)
  • [1114]amp;-$2-$1 = целая совпавшая строка - вторая группа - первый Пример группы

работает

$ tree ak
ak
├── adak
│   ├── cup-printing
│   │   └── Tshirt-printing.jpg
│   └── tshirt printing
│       └── Tshirt-printing.jpg
└── akhiok
    ├── cup-printing
    │   └── Tshirt-printing.jpg
    └── tshirt printing
        └── Tshirt-printing.jpg

6 directories, 4 files
$ rename -n 's/(.+)\/(.+)\/.+\/[^.]+/[111]amp;-$2-$1/' ak/*/*/*.jpg
rename(ak/adak/cup-printing/Tshirt-printing.jpg, ak/adak/cup-printing/Tshirt-printing-adak-ak.jpg)
rename(ak/adak/tshirt printing/Tshirt-printing.jpg, ak/adak/tshirt printing/Tshirt-printing-adak-ak.jpg)
rename(ak/akhiok/cup-printing/Tshirt-printing.jpg, ak/akhiok/cup-printing/Tshirt-printing-akhiok-ak.jpg)
rename(ak/akhiok/tshirt printing/Tshirt-printing.jpg, ak/akhiok/tshirt printing/Tshirt-printing-akhiok-ak.jpg)
$ ^-n^^     # ← this prints and runs the former command line without “-n”
rename  's/(.+)\/(.+)\/.+\/[^.]+/[111]amp;-$2-$1/' ak/*/*/*.jpg
$ tree ak
ak
├── adak
│   ├── cup-printing
│   │   └── Tshirt-printing-adak-ak.jpg
│   └── tshirt printing
│       └── Tshirt-printing-adak-ak.jpg
└── akhiok
    ├── cup-printing
    │   └── Tshirt-printing-akhiok-ak.jpg
    └── tshirt printing
        └── Tshirt-printing-akhiok-ak.jpg

6 directories, 4 files
1
ответ дан 23 October 2019 в 10:50

Попробуйте это,

find . -name "*.jpg" -exec sh -c '
  suffix=$(printf "%s" "$1" | awk -F"/" "{for(i=NF-2;i>1;i--)printf \"-\"\$i;}");
  echo mv "$1" "${1%.*}${suffix}.${1##*.}";
' find-sh {} \;
  1. , попытайтесь понять то, что это делает.
  2. Удостоверяются, что Вы - пути, не включают новую строку, иначе эти awk, команда перестанет работать.
  3. Удаляют echo для выполнения эти mv команда, если Вы довольны выводом.
0
ответ дан 23 October 2019 в 10:50

Другие вопросы по тегам:

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