2017-02-12 27 views
4

У меня есть сценарий Bash, который хорошо подходит для просто переименования каталогов, соответствующих критериям.Переименование каталогов на основе шаблона в Bash

for name in *\[*\]\ -\ *; do 
    if [[ -d "$name" ]] && [[ ! -e "${name#* - }" ]]; then 
    mv "$name" "${name#* - }" 
    fi 
done 

В настоящее время, если каталог выглядит следующим образом:

user1 [files.sentfrom.com] - Directory-Subject 

Он переименовывает каталог и только каталог, чтобы выглядеть как

Directory-Subject (this could have different type of text) 

Как я могу изменить критерии сценария/поиска в настоящее поиск по

www.ibm.com - Directory-Subject 

и переименуйте папку и только каталог для

Directory-Subject 

ответ

0

Вы можете написать свой код таким образом, так что она охватывает как случаи:

for dir in *\ -\ *; do 
    [[ -d "$dir" ]] || continue # skip if not a directory 
    sub="${dir#* - }" 
    if [[ ! -e "$sub" ]]; then 
    mv "$dir" "$sub" 
    fi 
done 

Перед запуском сценария:

$ ls -1d */ 
user1 [files.sentfrom.com] - Directory-Subject/ 
www.ibm.com - Directory-Subject 

После:

$ ls -1d */ 
Directory-Subject/ 
www.ibm.com - Directory-Subject/ # didn't move because directory existed already 
0

Простой ответ будет изменить *\[*\]\ -\ * к *\ -\ *

for name in *\ -\ *; do 
    if [[ -d "$name" ]] && [[ ! -e "${name#* - }" ]]; then 
    mv "$name" "${name#* - }" 
    fi 
done 

Для получения дополнительной информации, пожалуйста, прочитайте glob и wildcards