Нужен быстрый скрипт bash - PullRequest
       15

Нужен быстрый скрипт bash

0 голосов
/ 24 января 2011

У меня есть около 100 каталогов в одном родительском каталоге, которые придерживаются соглашения об именах [sitename] .com.Я хочу переименовать их все.Есть идеи?

Ответы [ 6 ]

7 голосов
/ 24 января 2011

Используйте rename (1) .

rename .com .subdomain.com *.com

И если у вас есть perl rename вместо обычного, это работает:

rename s/\\.com$/.subdomain.com/ *.com
2 голосов
/ 24 января 2011

Использование bash:

for i in *
do
    mv $i ${i%%.com}.subdomain.com
done

Конструкция $ {i %%. Com} возвращает значение i без суффикса '.com'.

0 голосов
/ 24 января 2011

Попробуйте это:

for FILE in `ls -d *.com`; do
  FNAME=`echo $FILE | sed 's/\.com//'`;
  `mv $FILE $FNAME.subdomain.com`;
done
0 голосов
/ 24 января 2011

См .: http://blog.ivandemarino.me/2010/09/30/Rename-Subdirectories-in-a-Tree-the-Bash-way

#!/bin/bash
# Simple Bash script to recursively rename Subdirectories in a Tree.
# Author: Ivan De Marino <ivan.demarino@betfair.com>
#
# Usage:
#    rename_subdirs.sh <starting directory> <new dir name> <old dir name>

usage () {
   echo "Simple Bash script to recursively rename Subdirectories in a Tree."
   echo "Author: Ivan De Marino <ivan.demarino@betfair.com>"
   echo
   echo "Usage:"
   echo "   rename_subdirs.sh <starting directory> <old dir name> <new dir name>"

   exit 1
}

[ "$#" -eq 3 ] || usage

recursive()
{
   cd "$1"
   for dir in *
   do
      if [ -d "$dir" ]; then
         echo "Directory found: '$dir'"
         ( recursive "$dir" "$2" "$3" )
         if [ "$dir" == "$2" ]; then
            echo "Renaming '$2' in '$3'"
            mv "$2" "$3"
         fi;
      fi;
   done
}

recursive "$1" "$2" "$3"
0 голосов
/ 24 января 2011

А как же:

ls |
grep -Fv '.subdomain.com' |
while read FILE; do
  f=`basename "$FILE" .com`
  mv $f.com $f.subdomain.com
done
0 голосов
/ 24 января 2011
find . -name '*.com' -type d -maxdepth 1 \
| while read site; do
    mv "${site}" "${site%.com}.subdomain.com"
  done
...