Skrypt powłoki: Skopiuj folder o nowej nazwie

0

Próbuję napisać ten skrypt powłoki, aby utworzyć w katalogu nadrzędnym kopię folderów znalezionych w bieżącym katalogu. Do tej pory napisałem to:

for folder in *; do

    mkdir ../$folder;
done

Chciałbym wykonać operację „znajdź i zamień” na nazwie folderu, aby na przykład folder o nazwie graphics-HDzostał skopiowany jakographics-SD

Przepraszam, jeśli to proste, ale absolutnie nie mam doświadczenia ze skryptem powłoki / unix.

Wielkie dzięki! JOT.

Jem
źródło
1
Czy możesz edytować i dodawać więcej szczegółów na temat operacji wyszukiwania i zamiany, które chcesz objąć (chyba że odpowiedź poniżej obejmuje je wszystkie)
Paul

Odpowiedzi:

2

Dodanie ukośnika końcowego do znaku zastępczego ogranicza dane wyjściowe do katalogów

for dir in */; do ...

Będziesz chciał przeczytać o rozszerzaniu parametrów bash - możesz znaleźć i wymienić w powłoce:

newname=${dir/%-HD/-SD}
Glenn Jackman
źródło
Jaki jest znak procentu?
Ярослав Рахматуллин
Zobacz dokumentację połączoną z moją odpowiedzią:If pattern begins with ‘%’, it must match at the end of the expanded value of parameter.
glenn jackman
1

nie ma nic złego w tym, co masz, oprócz tego, że utworzy foldery z plików, a także folderów. Możesz sprawdzić, czy każdy folder jest katalogiem z [-d $ folder], lub użyć find. Z folderu, w którym masz foldery, które chcesz skopiować:

find -type d -maxdepth 1 -exec mkdir "../{}" \+ 

Aby wyszukać i zastąpić, należy zmienić nazwę z rename.berlios.de . możesz zmienić nazwę wszystkich folderów w ten sposób:

renamexm -s/-HD/-SD/ `find . -type d -maxdepth 1`
Ярослав Рахматуллин
źródło