2014-11-18 3 views
2

주어진 밑줄 이있는 폴더와 하위 폴더 (파일 만 변경 가능)를 실행하려고합니다. 그 밑줄을 쳐라. - 하나의 "./ :맨 끝에 "_"(밑줄) 기호가있는 폴더 (파일 제외) 선택

for folder in ./_* do 
    mv "$folder" "${folder:1}" 
done 

위의 스크립트는이 내가 여기에 해결하기 위해 노력하고있어 이유로 사양에 아직 작동하지 않습니다 : 나는 간단한 쉘 스크립트로 이것을 달성에 계획입니다 _ * "이 (가) 오류 (./_*: No such file or directory)를 던지거나 이 아닌 폴더를 선택하면에 밑줄이 있어야합니다. - 둘, 폴더 만 지정하지 않습니다 ... 할 수있는 mv 명령에 대한 옵션이 있습니까?

감사

답변

3

은 밑줄을 사용로 시작하는 모든 폴더를 찾으려면이 find :

find . -type d -name '_*' 

그리고 _ 사용 제거 :

find . -type d -name '_*' -exec bash -c 'f="$1"; mv "$f" "${f:1}" - {} \; 
1

재귀 사용을 :

shopt -s globstar 

for dir in **/_*/; do 
    mv "$dir" "${dir:1}" 
done 
+1

패턴에서 후행하는'/'을주의하십시오. 이는 결과에서 디렉토리가 아닌 것을 필터링합니다. – chepner