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
다음에 cd
Meta-.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/