2009-04-12 3 views
1

파일 집합의 확장명을 변경하려면 tcsh에 한 줄 명령이 있습니까?tcsh : 여러 파일의 파일 확장명을 변경하는 방법은 무엇입니까?

ren *.abc *.def 

이 대신 .def로 종료 .abc로 끝나는 모든 파일의 이름을 변경합니다 : 다양한 DOS 셸에서, 나는 다음과 같은 사용하는 데 사용. sed 조건에서 다음과 같이 수행됩니다.

sed -e 's/\(.\)*\.abc$/\1.def/' 

* nix에서 비슷한 것을 얻기 위해 비트와 조각을 함께 던질 수는 있지만, 여기서 문제는 tcsh으로 경험 부족이라고 추측합니다.

도움을 주시면 감사하겠습니다.

답변

0

[한 부씩 답변 - 질문자가 답변에서 가져온 것] :

tcsh의에서 파일의 이름의 그룹을 변경하는 쉬운 방법이 없습니다. Chas. tcsh에서 가장 간단한 솔루션을 제공했지만 여전히 쉽지는 않았습니다.

tcsh를 쉘로 사용하는 경우 가장 좋은 방법은 외부 이름 바꾸기 명령을 사용하는 것입니다 (Eddie의 답변 참조).

이 질문에 실제로 부탁 한 것이 아닌 것을 알았지 만, 내가 배운 것은 내 질문이 잘못되었다는 점입니다.

답장을 보내신 모든 분들께서 귀하의 답변은 매우 도움이되었습니다. 각각은 약간 다른 방식으로 이루어졌습니다. 누군가가 내가 가지고있는 것보다 더 나은 방법으로이 질문의 결과를 요약하고 싶다면, 제발하십시오. 나는 내 "받아 들인 대답"을 다른 사람에게주는 것을 훨씬 좋아한다!

2

내가 여기 tcsh이 작업을 수행 할 수있는 쉬운 방법을 제공하는 경우 모르겠지만 내가 일반적으로 할 수있는 작업은 다음과 같습니다

나는 또한 정규식을 사용하여 파일 이름을 변경 regexmv라는 파이썬 스크립트를 작성했습니다
ls *.abc | sed 's/\(.*\)\.abc/mv "\1.abc" "\1.def"/' | sh 

.

import os 
import re 
import sys 
import os.path 

def main(argv): 
    dry_run = True 
    if argv[0] == '-f': 
     dry_run = False 
     argv = argv[1:] 

    pattern = argv[0] 
    repl = argv[1] 
    files = argv[2:] 

    max_length = max([len(f) for f in files]) 

    for f in files: 
     new = re.sub(pattern, repl, f) 
     if f != new: 
      if not os.path.exists(new): 
       print "%s --> %s" % (f.ljust(max_length), new) 
       if not dry_run: 
        os.rename(f, new) 

if __name__ == '__main__': 
    main(sys.argv[1:]) 

은 내가 처음과 같이 실행 : 여기에 스크립트의

regexmv '\.abc$' '.def' * 

의 이름이 변경 될 파일 (그들이 이름을 변경하는 방법)를 참조하려면, 이것은 내가 원하는 경우, I 그것을 실행하십시오 :

regexmv -f '\.abc$' '.def' * 
7

이 네 줄에 입력하십시오. 첫번째 프롬프트가 나온 후, tcsh는 당신이 foreach 루프 안에 있음을 알려줍니다. 쉘 스크립트로 변환하고 쉘 스크립트를 호출 할 수도 있습니다.

foreach n (`ls *.abc`) 
set base = `basename $n .abc` 
mv $n $base.def 
end 
0

"* nix world"에는 확장이라는 개념이 없습니다. '점 abc'는 파일 이름의 일부입니다. here 동작을 모방하는 펄 스크립트가 있습니다.

은 내가 tcsh의를 제공 할 수 없습니다 죄송하지만, bash는 관용구가 :

for f in *.foo; do 
    mv $f ${f%foo}bar 
done 
3

다른 사람이 말한뿐만 아니라, 많은 UNIX 맛이 "rename"라는 명령을 제공가. 목표가 tcsh을 사용하여 파일의 이름을 바꾸는 것이면 특히 도움이되지 않습니다. 그것은 매우 마음 - 간단하고 매우 유용한 명령입니다

rename abc def *.abc 

: 그렇지 않으면, 당신은 당신의 목표를 달성 할 수있다. 세 번째 인수에서 제공하는 파일 목록에서 첫 번째 인수의 모든 항목을 두 번째 인수로 바꿉니다. 필자가 잘 알고있는 버전에서, 쉘은 3 번째 인수에 대한 파일 목록에서 패턴을 확장 할 정도를 제외하면 전혀 패턴 일치가 없습니다.

0
foreach f (*.abc) 
mv $f $f:r.xyz 
end 
관련 문제