2011-03-31 7 views
3

가이 코드에, 같이 Recurse을 명령 줄 옵션 -r을 추가 할 : 그래서추가 명령 행 옵션 -r

for name in *.$1; do 
    stripped_name="$(basename "$name" ".$1")" 
    mv "$name.$1" "$name.$2" 
done 

I 입력 "-r의 TXT 문서를 변경"경우 명령이 실행되어야한다 재귀 적으로 하위 폴더에. 예를 들어 파일 aaa.txt와 파일 y/bbb.txt 및 y/ccc.txt ....가 포함 된 디렉토리 y가있는 경우 파일 aaa.doc, y/bbb.doc 및 y/ccc가 있어야합니다 .의사.

또한 "-r"을 제공하지 않으면 정상적으로 작동합니다.

누구든지 내 스크립트에 이것을 추가하는 방법을 알고 있습니까?

답변

1

나는 이것이 이상적이라고 생각하지 않지만 다음과 같은 점은 어떨까요? 이 파일은 find을 사용하여 파일 이름을 바꾸지 만, 이 아닌 경우 -r을 입력하면 -maxdepth 1이 인수에 추가됩니다. 그런 다음 Debian 기반 시스템 (예 : Ubuntu)에서 rename(1) 명령을 사용하여 일치하는 파일의 이름을 바꿉니다. -print0xargs -0 내가 -r 선택하는 "경우"를 사용하여 어쩌면 생각

#!/bin/bash 

if [ x"$1" = x-r ] 
then 
    FIND_OPTIONS="" 
    shift 
else 
    FIND_OPTIONS="-maxdepth 1" 
fi 

FROM="$1" 
TO="$2" 

find . $FIND_OPTIONS -name '*.'$FROM -print0 | xargs -0 rename "s/\.$FROM/\.$TO/" 
+0

이 등 줄 바꿈을 포함 할 수 있습니다 이상한 이름을 가진 문제를 가지고 있지 않음을 확인합니다. 나는 그런 식으로 쓰려고 생각하고있다. 어떻게 생각해? BTW, 제안 및 코드 마크 주셔서 감사합니다. –

+1

여기에'case '를 사용할 필요가 없다고 생각합니다 - 여러 가지 가능성 중 하나가 아닌'-r'이 존재하거나 존재하지 않습니다. –