![디렉터리를 변경하지 않고 소스와 동일한 경로에 파일 복사](https://linux55.com/image/209215/%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A5%BC%20%EB%B3%80%EA%B2%BD%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%EC%86%8C%EC%8A%A4%EC%99%80%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EA%B2%BD%EB%A1%9C%EC%97%90%20%ED%8C%8C%EC%9D%BC%20%EB%B3%B5%EC%82%AC.png)
어떤 디렉토리(예: 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
서브셸을 사용하면 원하는 디렉터리로 이동할 ( ... )
수 있으며, 실패하지 않으면 복사를 수행할 수 있습니다. 상위 쉘 프로세스의 작업 디렉토리가 아닌 하위 쉘의 작업 디렉토리 만 영향을 받습니다.chdir
chdir
chdir
( cd ~/mydir/subdir && cp file1 file2 )
이는 쉘 기능으로 쉽게 추상화될 수 있으며 탭 완성은 오프셋 작업 디렉토리에 비해 어렵지 않습니다(적어도 ZSH의 경우).
답변3
find
with 사용 -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
에 전달되는 몇 가지 기본 옵션이 있습니다 .cp
mv
cp
--no-preserve
또는,라인 편집 기능을 사용하면 경로를 매우 쉽고 빠르게 복사할 수 있습니다.유형다시.
먼저
cp ~/mydir/subdir/
(탭 완성이 가능합니다)경로에 공백이 없으면 단일 ctrl-w를 사용하여 해당 경로를 "종료"하고 종료 링에 저장합니다. 공백이 있는 경우 1개 이상이 필요하고 oversize 및 kill 을 수행하면
cp
Ctrl-/로 크기 초과를 취소하더라도 킬 링 항목의 일부가 됩니다.또는 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
"단어"를 눌러 커서를 이동하고 앞으로/뒤로 단어를 삭제하는 것은 빠른 편집 및 경로 복사에 좋습니다.