2014-03-30 4 views
1

저는 최근에 파일과 프로그램을 뒤적 거리며 연구를 많이 했었습니다. 그러나 내 bash는 너무 녹슬었기 때문에 어떻게 생각합니까? 이 작업을 수행. 예를 들면 다음과 같습니다.당신은 cp와 cd 또는 mv와 cd를 결합하는 스크립트를 어떻게 만들겠습니까

jt ~ $ cp foo.txt arbitrary/folder/destination 
jt ~ $ cd arbitrary/folder/destination 
jt ~/arbitrary/folder/destination $ //Some command here 

내가 방금 복사 한 위치에있을 수 있습니다. 내가 함께 할 수있는 몇 가지 방법이 bash는 정규식의 내가

jt ~ $ magic foo.txt arbitrary/folder/destination 
jt ~/arbitrary/folder/destination $ ls 
foo.txt 

그것은 완전히 나에게 많은 도움이 될 것이며, 좀 떠들썩한 파티를

+2

참고 찰스의 스크립트 @의 느린 (하지만 짧은) 변형, UNIX에 그것은 "디렉토리"는 "폴더에"아니다. 그래서 find-type f가 아닌 find-type d이고, ls -l이 디렉토리에'f'가 아닌'd'를 표시하는 이유입니다. –

+0

오늘 나는 배웠다. – SetSlapShot

답변

5

사용을 배울 수를 할 수 있도록 별칭 (또는 어쩌면 simipler) 함수. 당신은 당신의 .bashrc의 아래에 뭔가를 넣을 수 있습니다 :로 호출

cpd() { 
    cp -- "$1" "$2" || return 
    if [[ -d "$2" ]]; then 
    cd -- "$2" 
    else 
    case $2 in 
     ?*/*) cd -- "${2%/*}" ;; 
     /*) cd/;; 
    esac 
    fi 
} 

를 ... ...

cpd magic.txt arbitrary/directory/destination 

또는

cpd magic.txt arbitrary/directory/destination/filename.txt 

함수가 필요하다 때문에 대안이 작동하지 않습니다 :

  • 외부 스크립트는 호출자의 상태를 변경할 수 없습니다 (스크립트는 자체 작업 디렉토리를 변경할 수 있지만이를 시작한 쉘은 변경할 수 없음).
  • 별칭은 논리 또는 조건부를 실행할 수 없으며 위치 지정 인수를 참조 할 수 없습니다.
+0

정확하게 내가 찾고 있었던 것이었다. 고맙습니다. 받아들이 자마자 .. – SetSlapShot

+0

(현재 디렉토리에있는)'cpd magic.txt file.txt'는 ok를 복사하지만'cd'는 실패 할 것입니다. 'cpd magic.txt/somefile.txt'에서'cd'도 실패합니다. 'cd $ (dirname "$ 2")'을 사용하는 것이 더 좋습니다. – jm666

+0

@ jm666,'cd - "$ (dirname"$ 2 ")"', 어쩌면. 따옴표없이 인용문을 사용하여 실패 사례를 설정했습니다. –

2

cpd() { 
    cp -- "$1" "$2" && [[ -d "$2" ]] && cd -- "$2" || cd -- "$(dirname "$2")" 
} 
+0

+1. 유일하게 불행한 것은'a && b || c'- 만약'b'가 원하는 동작이지만 실패하면'a'의 결과가 그것을 가리 키지 않아도'c'가 끝납니다. –

+0

@CharlesDuffy 네, 기대하고 있습니다. "$ 2"가 디렉토리이고'cp'가 실패하지 않으면'cd $ 2'가 성공해야합니다. (Ofc, 여기 아직 경쟁 조건이 있습니다 ...) :) – jm666