/ / Як перейменувати кілька каталогів у bash за допомогою символьної схеми - bash, каталог, знайти, перейменувати

Як перейменувати кілька каталогів в bash за допомогою шаблону символів - bash, каталог, знайти, перейменувати

Я дуже новачок у башті, тому, будь ласка, не "тнадмірно ускладніть відповідь! У мене є приблизно 200 підкаталогів, кожен з яких названий аналогічно цьому. (Я думаю, що вони є підкаталогами. Вони принаймні живуть в іншому каталозі.)

XMMXCS J083454.8+553420.58

Мені потрібно масово перейменувати всі ці каталоги та змінити "+" в імені каталогу на "-".

Щоб змінити назви свого каталогу, я спробував:

find . -depth -type d -name + -exec sh -c "mv "${0}" "${0%/+}/-"" {} ;

і

find . -name + -type d -execdir mv {} - 

Однак я думаю, що це не працює, тому що + і- не буквені символи. Як мені це обійти? Все, що я знайшов в Інтернеті, стосується перейменування файлів на відміну від каталогів, і якщо хтось знає, як обійти це без необхідності перейменувати їх вручну, було б дуже вдячно.

Це попереднє запитання я спробував, і синтаксис не працює для мене. Папки після запуску називаються однаковими. Перейменуйте кілька каталогів, що відповідають шаблону

Дякую

Відповіді:

0 для відповіді № 1

У вас може бути такий сценарій.

#!/bin/bash

DIR="."  ## Change to the directory you want.

for SDIR in "$DIR"/*; do
[[ -d $SDIR ]] || continue           ## Skip if it"s not a directory
BASE=${SDIR##*/}                     ## Gets the base filename (removes directory part)
NEW_NAME=${BASE//+/-}                ## Creates a new name based from $BASE with + chars changed to -
echo mv -- "$SDIR" "$DIR/$NEW_NAME"  ## Rename. Remove echo if you think it works the right way already.
done

Потім біжи bash script.sh.


0 для відповіді № 2

Ваш оригінальний синтаксис був досить близький, спробуйте щось подібне

find -mindepth 1 -maxdepth 1 -type d -name "*+*" -exec bash -c "mv "${0}" "${0//+/-}"" {} ;

Питання

  • -depth Виконує dfs обхід, але, здається, ви хочете, щоб каталоги були лише на одному рівні
  • Потрібно відповідати глобусам, які містять +. Так *+* і не просто + (цитування потрібне для глобусів, щоб вони оброблялися знахідкою, а не оболонкою)
  • З "${0%/+}/-" ви ніби змішуєте кілька синтаксисів, ${0//SUBSTRING/TO_REPLACE} із заміною всіх примірників SUBSTRING з TO_REPLACE