Я дуже новачок у башті, тому, будь ласка, не "тнадмірно ускладніть відповідь! У мене є приблизно 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