/ / Как да преименуваме няколко директории в баш с помощта на символен модел - баш, директория, намиране, преименуване

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