Переименовать папки из имени файла [script]

Я хочу переименовать каждую папку с именем одного файла внутри. Пример:

Folder1/AAA.jpg
Folder2/BBB.jpg
FOlder3/CCC.jpg
Folder4/05.02.2019.jpg

to

AAA/AAA.jpg
BBB/BBB.jpg
CCC/CCC.jpg
05.02.2019/05.02.2019.jpg

В Windows I могу сделать это с помощью этого сценария в простом пакете файлов:

for /d %%a in (*) do (
  for %%b in ("%%a\*.jpg","%%a\*.png") do (
     ren "%%a" "%%~nb"
  )
)

В Ubuntu я пробовал, но, возможно, я пишу неправильный синтаксис. Вы можете мне помочь?

1
задан 19 July 2019 в 16:10

3 ответа

Вот почти аналогичный сценарий удара:

#!/bin/bash
for i in Folder*/*
do
    FILE="$(basename "$i")"
    mv "$(dirname "$i")" "${FILE%.*}"
done

Пример использования:

$ tree
.
├── Folder1
│  └── some name.png
└── Folder2
    └── 03.02.2019.jpg

2 directories, 2 files

$ for i in Folder*/*; do FILE="$(basename "$i")"; mv "$(dirname "$i")" "${FILE%.*}"; done

$ tree
.
├── 03.02.2019
│  └── 03.02.2019.jpg
└── some name
    └── some name.png

2 directories, 2 files

Если необходимо проверить, является ли расширение jpg или png:

#!/bin/bash
for i in Folder*/*
do
    if [[ $i =~ (jpg|png)$ ]]
    then
        FILE="$(basename "$i")"
        mv "$(dirname "$i")" "${FILE%.*}"
    fi
done

Можно удалить ограничение имени каталога при помощи */* вместо Folder*/*. Также можно изменить соответствующую строку к echo mv "$(dirname "$i")" "${FILE%.*}" для теста пробного прогона.

Дальнейшее чтение:

1
ответ дан 3 December 2019 в 06:49

Принятие они - все в том же родительском каталоге:

for f in */*.jpg ; do mv "$(dirname "$f")" "$(basename "$f" .jpg)" ; done

В медленном-mo:

  • */*.jpg перечислит Folder1/AAA.jpg,Folder2/BBB.jpg,FOlder3/CCC.jpg
  • $(dirname "$f") извлечения Folder1,Folder2,FOlder3
  • "$(basename "$f" .jpg)" извлекает имя файла и отбрасывает расширение: AAA, BBB, CCC...
  • Таким образом, Вы заканчиваете с mv Folder1 AAA, mv Folder2 BBB...
3
ответ дан 3 December 2019 в 06:49

Этот сценарий удара изменяет имена папок.

#!/bin/bash
echo Enter old foldername
read oldfoldername
echo Enter new foldername
read newfoldername
mv $oldfoldername $newfoldername
Usage: bash {filename you copied script into}.sh
0
ответ дан 3 December 2019 в 06:49

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

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