LINUX.ORG.RU
ФорумAdmin

Помогите со скриптом пожалуйста! ${PWD##*/}


0

1

Добрый день, помогите со скриптом, пожалуйста!

Мне нужно переименовать файлы так, чтобы в начале имени каждого из них стояло имя каталога, в к-ром он лежит: ИмяКаталога_СтароеИмяФайла.jpg

Вот я нашёл, что имя каталога без пути я получу через ${PWD##*/}. Как бы его теперь передать в имена файлов через rename, чтобы старое имя сохранилось рядом ?

Ещё бы хотелось это имя каталога засунуть в метаданные файла через exiftool, но это следующий шаг :)

Спасибо заранее!

[ megabaks@desktop ] ~ $ touch OLOLO OLOLO_1 OLOLO_2
[ megabaks@desktop ] ~ $ for file in `find . -type f -name "OLOLO*"`;do mv ${file} ${PWD##*/}_${file##*/};done
[ megabaks@desktop ] ~ $ ls *OLOLO*
megabaks_OLOLO  megabaks_OLOLO_1  megabaks_OLOLO_2
[ megabaks@desktop ] ~ $ 
megabaks ★★★★ ()
Последнее исправление: megabaks (всего исправлений: 3)

Ещё бы хотелось это имя каталога засунуть в метаданные файла через exiftool, но это следующий тред :)

Быстрофикс.

dada ★★★★★ ()
Ответ на: комментарий от megabaks
$ echo ${PWD##*/}
такая директория
$ touch OLOLO OLOLO_1 OLOLO_2
$ for file in `find . -type f -name "OLOLO*"`;do mv ${file} ${PWD}/${PWD##*/}_${file##*/};done
mv: указанная цель «директория_OLOLO_2» не является каталогом
mv: указанная цель «директория_OLOLO_1» не является каталогом
mv: указанная цель «директория_OLOLO» не является каталогом
$ ls
OLOLO  OLOLO_1  OLOLO_2

:)

anonymous ()
Ответ на: комментарий от anonymous
[ megabaks@desktop ] ~ $ mkdir "такая директория"
[ megabaks@desktop ] ~ $ cd "такая директория"
[ megabaks@desktop ] ~/такая директория $ touch OLOLO OLOLO_1 OLOLO_2
[ megabaks@desktop ] ~/такая директория $  for file in `find . -type f -name "OLOLO*"`;do mv ${file} "${PWD##*/}_${file##*/}";done
[ megabaks@desktop ] ~/такая директория $ ls
такая директория_OLOLO  такая директория_OLOLO_1  такая директория_OLOLO_2
[ megabaks@desktop ] ~/такая директория $ 

я думаю ТС сам раздерётся с экранированием

megabaks ★★★★ ()
Ответ на: комментарий от megabaks

Только если запускать такой скрипт из каталога, в к-ром лежат другие каталоги, то ${PWD##*/} берётся из него, из каталога верхнего уровня. И файлы перемещаются в него этим mv.

gregg128 ()
Ответ на: комментарий от gregg128

если совсем просто, то это можно сделать обернув данный цикл циклом типа

for path in `find . -type d`;do
cd "${path}"
 for file in `find . -type f`;do mv ${file} "${PWD##*/}_${file##*/}";done
done
как-то так

megabaks ★★★★ ()
Ответ на: комментарий от megabaks

Тот же эффект - PWD берётся от вышестоящего каталога и все файлы оказываются в нём же :(

gregg128 ()
Ответ на: комментарий от gregg128
[ megabaks@desktop ] ~ $ ls -1 test-lor/*
test-lor/dir1:
1
2
3
4
5

test-lor/dir2:
1
2
3
4
5

test-lor/dir3:
1
2
3
4
5
[ megabaks@desktop ] ~ $ sh scripts/LOR/test-lor
[ megabaks@desktop ] ~ $ ls -1 test-lor/*
test-lor/dir1:
dir1_1
dir1_2
dir1_3
dir1_4
dir1_5

test-lor/dir2:
dir2_1
dir2_2
dir2_3
dir2_4
dir2_5

test-lor/dir3:
dir3_1
dir3_2
dir3_3
dir3_4
dir3_5
[ megabaks@desktop ] ~ $

сам скрипт

#!/bin/bash

for path in `find /home/megabaks/test-lor -mindepth 1 -type d`;do
	for file in `find "${path}" -type f`;do
		mv "${file}" "${path}/${path##*/}_${file##*/}"
	done
done

megabaks ★★★★ ()
find /dir -type f -printf "mv %p %h/\$(echo %h | sed 's@.*/@@')_%f\n" | sh
sdio ★★★★★ ()
Последнее исправление: sdio (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.