디렉터리를 변경하지 않고 소스와 동일한 경로에 파일 복사

디렉터리를 변경하지 않고 소스와 동일한 경로에 파일 복사

어떤 디렉토리(예: home) 아래에 다음과 같은 경로가 있고 ~/mydir/subdir/file1복사하고 싶다고 가정합니다.파일 1:

홈 디렉터리에서 이 작업을 수행할 수 있습니다.

cp ~/mydir/subdir/file1 ~/mydir/subdir/file2

현재 디렉토리를 의미하는 mydir/subdir것처럼 해당 부분을 다시 반복 할 필요가 없도록 "소스와 동일한 경로에"를 의미하는 바로가기가 있습니까 ? .아니면 동일한 결과를 얻는 다른 방법이 있습니까?

먼저 할 수 있다는 것을 알고 있지만 cd ~/mydir/subdir동일한 디렉토리에 머물 수 있게 해주는 한 줄 솔루션을 찾고 있습니다. 한 가지 옵션은 변수를 사용하는 것이지만 많은 명령을 입력할 때 좀 더 우아한 방법을 원합니다.

온라인에서 찾아보고 검색했지만 man cp해당 옵션을 찾을 수 없습니다. 대답이 "아니오"라면 괜찮습니다. 다른 사람들이 시간을 절약해 주는 방법을 사용했는지 확인하고 싶었을 뿐입니다. 감사해요!

답변1

(1)을 사용 bash하고 경로에 공백이나 줄바꿈(2)이 없다고 가정하면 다음을 사용합니다.

cp ~/mydir/subdir1/{file1,file2}

~이것은 bash에 의해 ( 확장 과 함께) 확장됩니다 .

cp ~/mydir/subdir1/file1 ~/mydir/subdir1/file2

항상 그렇듯이 다음을 사용하여 테스트할 수 있습니다.echo

echo cp ~/mydir/subdir1/{file1,file2}

의견에 따르면 :

(1) 이것은 다른 쉘에서도 작동할 수 있습니다. 모든 쉘을 테스트할 시간이 없습니다.

(2) "흥미로운" 이름의 경우 tab완성을 사용하거나( bash적절한 이스케이프가 가능함) 따옴표(중괄호는 아님)를 사용하십시오.

mv ./"some dir"/{"some name","other id"}

답변2

서브셸을 사용하면 원하는 디렉터리로 이동할 ( ... )수 있으며, 실패하지 않으면 복사를 수행할 수 있습니다. 상위 쉘 프로세스의 작업 디렉토리가 아닌 하위 쉘의 작업 디렉토리 만 영향을 받습니다.chdirchdirchdir

( cd ~/mydir/subdir && cp file1 file2 )

이는 쉘 기능으로 쉽게 추상화될 수 있으며 탭 완성은 오프셋 작업 디렉토리에 비해 어렵지 않습니다(적어도 ZSH의 경우).

답변3

findwith 사용 -execdir(지원되는 경우 원래 BSD에서 사용되었지만 GNU에서도 지원됨 find)

그러나 지정된 명령은 일치하는 파일이 포함된 하위 디렉터리에서 실행되었습니다.

예를 들어

find ~/mydir/subdir/file1 -prune -execdir cp "{}" file2 \;

( 이 유형이 맞는지 -prune확인하기 위해file1목차, find모든 파일을 거기에 복사하는 것으로 끝나지 않을 것입니다 file2. / 없이 디렉토리를 복사하라는 요청을 받으면 어쨌든 불평할 것입니다 cp.-r-a

답변4

인터렉티브, 파일 이름이 포함된 readline 편집 환경을 제공하는 icp유사한 명령이 있습니다 . imv"renameutils" 패키지에 있습니다. 보다매뉴얼 페이지

...$ icp   ~/foo/bar/baz
> /home/user/foo/bar/baz       # edit this and hit return.  it runs cp for you

적어도 경로에 공백이 포함되어 있지 않은 경우 편집 시 탭 완성을 사용할 수 있습니다. 불행하게도 이것들은 실패한 것 같습니다.

대상 파일이 존재하는 경우 대상 파일을 덮어쓰기 전에 메시지가 표시됩니다.

icp그리고 의 (타임스탬프와 같은 속성)를 포함하여 또는 각각 imv에 전달되는 몇 가지 기본 옵션이 있습니다 .cpmvcp--no-preserve


또는,라인 편집 기능을 사용하면 경로를 매우 쉽고 빠르게 복사할 수 있습니다.유형다시.

  • 먼저 cp ~/mydir/subdir/ (탭 완성이 가능합니다)

  • 경로에 공백이 없으면 단일 ctrl-w를 사용하여 해당 경로를 "종료"하고 종료 링에 저장합니다. 공백이 있는 경우 1개 이상이 필요하고 oversize 및 kill 을 수행하면 cpCtrl-/로 크기 초과를 취소하더라도 킬 링 항목의 일부가 됩니다.

    또는 ctrl-a, ctrl-오른쪽 화살표를 눌러 커서를 뒤에 놓은 cp다음 ctrl-k를 눌러 줄 끝까지 종료합니다.

  • 명령줄이 1단계로 돌아가도록 Ctrl-y를 사용하여 종료한 항목을 되돌리지만 디렉터리는 붙여넣을 수 있습니다.

  • 소스 파일 이름(탭 완성이 가능합니다)

  • 스페이스를 누른 다음Ctrl-y를 사용하여 경로의 다른 복사본을 만듭니다.. 이제 명령줄은 다음과 같습니다.
    cp ~/mydir/subdir/file1 ~/mydir/subdir/

  • 최종 파일 이름(탭 완성이 가능합니다)

동일한 빌딩 블록을 다른 순서로 사용할 수 있습니다. 예를 들어, 파일 이름을 포함한 소스 경로를 입력하거나 복사/붙여넣기 시작하고 해당 디렉터리에 복사본을 두려는 경우에만 디렉터리를 종료/끌어오기 전에 Ctrl-왼쪽 화살표를 눌러 커서를 뒤로 이동하세요. 해당 섹션을 선택한 다음 ctrl-e를 눌러 줄 끝을 확인한 다음 다른 복사본을 꺼냅니다.

아니면 당신이 원한다면복사본에 유사한 파일 이름 제공, kill /2x는 전체 경로(파일 이름 포함)를 복사한 다음 두 번째 복사본(대상)을 편집합니다. 마찬가지로 탭 완성도 모든 단계에서 가능합니다.

실수로 다른 것을 죽인 경우 ctrl-y는 잘못된 것을 꺼내고 alt-y는 이전 킬링 항목으로 다시 순환합니다.

이러한 대화형 줄 편집 도구는 편집에만 유용한 것이 아니라 cp"단어"를 눌러 커서를 이동하고 앞으로/뒤로 단어를 삭제하는 것은 빠른 편집 및 경로 복사에 좋습니다.

관련 정보