Аз съм много нова, за да се занимавам, така че моля те несвръхпълни отговора! Имам приблизително 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 traversal, но изглежда, че искате директории само на едно ниво дълбоко- Трябва да съответствате на глобуси, които съдържат
+
, Така*+*
и не просто+
(цитиране е необходимо с глобуси, така че те се обработват чрез намиране, а не черупката) - с
"${0%/+}/-"
изглежда, че смесвате няколко синтаксиса,${0//SUBSTRING/TO_REPLACE}
с подмяна на всички копия наSUBSTRING
сTO_REPLACE