У меня есть около 100 каталогов в одном родительском каталоге, которые придерживаются соглашения об именах [sitename] .com.Я хочу переименовать их все.Есть идеи?
Используйте rename (1) .
rename .com .subdomain.com *.com
И если у вас есть perl rename вместо обычного, это работает:
rename s/\\.com$/.subdomain.com/ *.com
Использование bash:
for i in * do mv $i ${i%%.com}.subdomain.com done
Конструкция $ {i %%. Com} возвращает значение i без суффикса '.com'.
Попробуйте это:
for FILE in `ls -d *.com`; do FNAME=`echo $FILE | sed 's/\.com//'`; `mv $FILE $FNAME.subdomain.com`; done
См .: 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"
А как же:
ls | grep -Fv '.subdomain.com' | while read FILE; do f=`basename "$FILE" .com` mv $f.com $f.subdomain.com done
find . -name '*.com' -type d -maxdepth 1 \ | while read site; do mv "${site}" "${site%.com}.subdomain.com" done