명령 행에서 파일을 복사하여 붙여 넣기위한 클립 보드? 않고 싶습니다. 가능합니까? 내

Bash에서 디렉토리를 방문한 다음 다른 디렉토리를 방문한다고 가정하십시오. 첫 번째 디렉토리에서 두 번째 디렉토리로 파일을 복사하지만 긴 경로 이름을 지정하지 않고 싶습니다. 가능합니까?

내 임시 해결책은 /tmp파일 사본을 저장하는 임시 장소로 사용하는 것입니다. cp myfile /tmp첫 번째 디렉토리에 cp /tmp/myfile .있을 때 두 번째 디렉토리에있을 때 그러나 파일이의 내용을 덮어 쓰는지 확인할 수 있습니다 /tmp.

파일을 복사하여 붙여 넣을 때 클립 보드와 비슷한 것이 있습니까?



답변

Bash를 사용하여 디렉토리를 방문합니다.

$ cd /path/to/source/directory
$ cd /path/to/destination/directory

그런 다음 바로 가기를 사용 ~-하여 이전 디렉토리를 가리 킵니다.

$ cp -v ~-/file1.txt .
$ cp -v ~-/file2.txt .
$ cp -v ~-/file3.txt .

디렉토리를 역순으로 방문하려면 다음을 수행하십시오.

$ cp -v fileA.txt ~-
$ cp -v fileB.txt ~-
$ cp -v fileC.txt ~-

답변

그 상황이 일회성으로 나오는 것을 본다면,

a=`pwd`
cd /somewhere/else
cp "$a/myfile" .

반 정기적으로 파일을 복사하는 디렉토리가있는 경우 내 .profile에서 일부 니모닉 변수를 정의합니다.

추가하기 위해 편집 :

그것에 대해 자고 난 후에, 나는 당신이 몇 개의 파일을 선택하고 “잘라 내기”또는 “복사”한 다음 다른 곳에 “붙여 넣기”하는 다른 GUI / OS 동작에 얼마나 가까이 접근 할 수 있을지 궁금했습니다. 내가 선택할 수있는 가장 좋은 선택 메커니즘은 두뇌 / 환경 설정과 껍질의 장갑 기능입니다. 나는 이름을 짓는 것에 독창적이지 않지만 이것은 기본 아이디어입니다 (Bash 구문에서).

function copyfiles {
  _copypastefiles=("$@")
  _copypastesrc="$PWD"
  _copypastemode=copy
}

function cutfiles {
  _copypastefiles=("$@")
  _copypastesrc="$PWD"
  _copypastemode=cut
}

function pastefiles {
  for f in "${_copypastefiles[@]}"
  do
    cp "${_copypastesrc}/$f" .
    if [[ ${_copypastemode} = "cut" ]]
    then
      rm "${_copypastesrc}/$f"
    fi
  done
}

그것을 사용하려면 ~ / .bash_profile을, 다음에 코드를 넣어 cd소스 디렉토리 및 실행에 하나 copyfiles glob*here또는 cutfiles glob*here. 쉘이 글로브를 확장하고 해당 파일 이름을 배열에 넣는 것입니다. 그런 다음 cd대상 디렉토리 로 이동하여 pastefiles를 실행하면 cp각 소스 파일에 대한 명령 이 실행 됩니다. 이전에 파일을 “잘라낸”경우 pastefiles도 소스 파일을 제거하거나 시도합니다. 이것은 기존 파일에 대해 오류 검사를 수행하지 않습니다 cp. 그것의).


답변

나는 이것이 ~-정답 이라고 생각 하지만 bash에는 텍스트를 복사 / 붙여 넣을 수 있는 내장 라인 편집기 가 있습니다.

당신이 이맥스 모드에있는 경우 당신이 호출 할 수 있습니다 cd역사에서 명령 및 사용을 Control-u위해 죽일 킬 (kill) 링이라는 bash는 “클립 보드”로 선을 (다른 방법도있다). 그런 다음 언제든지을 사용 하여이 문자열을 새 명령에 넣을 수 있습니다 Control-y. 분명히, 귀하의 예에서 이것은 cd명령 에 절대 디렉토리 이름을 사용한 것에 달려 있습니다 .

흥미로운 기본 키 바인딩을 사용할 수도 있습니다 Meta-.. 그러면 이전 명령 의 마지막 단어 가 현재 줄로 복사 됩니다. 반복하면 기록에서 하나의 명령으로 되돌아갑니다. 당신이 할 경우 그래서 cd /x, 다음, cd /y다음에 cdMeta-.Meta-.있을 것이다 당신이 /x당신의 입력에.


답변

Anderson M. Gomes의 답변을 확장하여 Bash를 사용하면 디렉토리 스택 의 위치를 ~N(또는 ~+N) 를 입력하여 디렉토리 스택의 이전 디렉토리를 참조 할 수 있습니다 N. 예를 들면 다음과 같습니다.

# go some places
$ cd /path/to/source/directory
$ pushd /path/to/destination/directory
$ pushd $HOME
$ pushd /tmp

# show the current dir stack
$ dirs -v
0 /tmp
1 ~
2 /path/to/destination/directory
3 /path/to/source/directory

이제 다음을 사용하여 두 개의 과거 디렉토리 사이에서 파일을 복사 할 수 있습니다.

cp -v ~3/file1.txt ~2

원래 포스터의 문제를 해결하려면 다음을 수행하십시오.

$ cd /path/to/source/directory
$ pushd /path/to/destination/directory

# show the current dir stack
$ dirs -v
0 /path/to/destination/directory
1 /path/to/source/directory

# copy
cp -v ~1/file[123].txt .

많은 파일 세트를 사용하면 이름을 매니페스트 파일에 나열한 다음 소스 디렉토리에서 복사를 수행 할 수 있습니다.

$ cd /path/to/destination/directory
$ pushd /path/to/source/directory

# copy
cp -v $(cat files_to_copy.list) ~1

참조 : Bash 매뉴얼 페이지의이 섹션


마찬가지로 Tcsh에서는 =2(이 아닌 ~2) 표기법을 사용 하여 디렉토리 스택의 두 번째 디렉토리를 참조 할 수 있습니다 .

참조 : Tcsh 매뉴얼 페이지의이 섹션


답변

첫 번째 디렉토리에있을 때 소스를 말하거나 src간단히 말하면 실행하십시오.

src=${PWD}

그런 다음 cd두 번째 디렉토리로 이동하여 다음 을 실행하십시오.

cp -i ${src}/filename .

-i당신이 덮어 쓸 경우 중복 된 파일이있는 경우 옵션은 요청합니다


답변

anderson-m-gomes 응답의 변형입니다. Bash를 사용하여 디렉토리를 방문합니다.

$ cd /path/to/source/directory
$ cd /path/to/destination/directory

그런 다음 이전 디렉토리를 가리키는 변수 $ OLDPWD를 사용합니다.

$ cp -v $OLDPWD/file1.txt .

디렉토리를 역순으로 방문하려면 다음을 수행하십시오.

$ cp -v fileA.txt $OLDPWD/

답변

bash에 있다면 pushd and popd 사용 합니다. 이 명령은 나중에 사용할 수 있도록 편리한 FIFO 디렉토리 스택을 유지합니다. dirs를 사용하여 언제든지 스택을 참조 할 수 있습니다 .

따라서 나는 할 것입니다 :

pushd .
cd /somewhere/else
cp "`popd`/myfile"