2011-10-20 6 views
2

사이트 이름이 많은 디렉토리가 있습니다.디렉토리 이름을 abc.folder.xyz에서 folder.xyz로 변경하십시오.

dev.domain.com 
dev.domain2.com 
dev.domain3.com 

어떻게 배관 및/또는 재 지정 Bash를 이용한 리눅스 CLI에 <domain>.com에 그 이름을 바꿀 수 있습니다?

나는 붙어있는 것보다 요점을 얻습니다.

find . -maxdepth 1 | grep -v "all" | cut --delimiter="." -f3 | awk '{ print $0 }' 

나에게 도메인 부분을 제공하지만, 나는 그것을 지나갈 수 없습니다. 확실하지 awk도 대답입니다. 모든 조언을 부탁드립니다.

+0

당신이 .COM '에 이름을 무엇을하고 싶은 당신은 이름 변경을 수행하려는 경우, "|sh"과 끝을 추가 '? 모든 파일이 아닌가? – ayoy

+0

디렉토리 이름 만. 이 디렉토리에는 디렉토리 만 있고 파일은 없으므로 inode 유형을 고려하지 않아도됩니다. – Spechal

답변

1
for i in *; do mv $i $(echo $i | sed 's/\([^\.]*\).\([^\.]*\).\([^\.]*\)/\2.\1/'); done 

는 설명 :

for i in *; do ....; done 

echo $i | sed 's/\([^\.]*\).\([^\.]*\).\([^\.]*\)/\2.\1/' 

이 세 그룹 걸리는 ​​모든 파일에 대해 그것을 "을 제외한 모든 문자를." 그리고 순서 \ 2 \ 1 수단 변경 : 초 기, 도트, 첫 번째 그룹

$ (...)이 SED의 출력을 취하여 "페이스트"인쇄 그 후 MV $ I 및 작업 할 디렉토리 아래 "명령어 치환"http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution

+0

이 답변은 Spechal이 자신의 질문을 편집하기 전에 작성되었습니다. http://stackoverflow.com/users/427387/spechal –

+0

for i *; mv $ i $ (echo $ i | sed의/\ ([^ \.] * \). \ ([^ \.] * \). \ ([^ \.] * \)/\ 2를 수행하십시오. \삼/'); 끝난 – Spechal

1

rename 명령을 사용해보십시오. 그것은 다음과 같은 정규 표현식을 수행 할 수 있습니다

rename 's/\.domain.*/.com/' *.com 
+0

rename이 모든 리눅스 버전에서 이식 가능하지 않습니다. –

+0

문제가있는 버전은 무엇입니까? – topek

+0

IIRC 대부분 나이가 많은 사람입니다. 이름 바꾸기는 '표준'툴킷의 일부가 아닌 최신 버전입니다. 일부는 perl 스크립트이기 때문입니다. 넷북이나 임베디드 빌드와 같은 슬림 다운 빌드와 오래된 데비안 빌드를 조심하십시오. –

0

라고, 시도 :

ls -dF *|grep "/$"|awk 'BEGIN{FS=OFS="."} {print "mv "$0" "$2,$3}' 

는 MV 명령을 인쇄합니다.

ls -dF *|grep "/$"|awk 'BEGIN{FS=OFS="."} {print "mv "$0" "$2,$3}'|sh 
1

는 이름에서 선두 'dev.'을 제거하는 것이 다음과 같이해야한다 :

for i in $(find * -maxdepth 1 -type d); do mv $i $(echo $i | sed 's/dev.\(.*\)/\1/'); done 
관련 문제