Bash에서 한 디렉터리에 액세스한 다음 다른 디렉터리에 액세스한다고 가정해 보겠습니다. 긴 경로 이름을 지정하지 않고 첫 번째 디렉터리에서 두 번째 디렉터리로 파일을 복사하고 싶습니다. 가능합니까?
/tmp
내 임시 해결책은 이를 파일 복사본을 저장하는 임시 위치 로 사용하는 것입니다 . cp myfile /tmp
첫 번째 디렉터리에 있을 때, cp /tmp/myfile .
두 번째 디렉터리에 있을 때. 하지만 파일을 덮어쓰게 되는지 확인할 수 있습니다 /tmp
.
파일을 복사해서 붙여넣을 수 있는 클립보드 같은 것이 있나요?
답변1
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 ~-
답변2
이 일이 일회성으로 발생하는 것을 본다면 다음과 같이 할 수 있습니다.
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
. 일어나는 일은 쉘이 glob을 확장하고 파일 이름을 배열에 넣는 것뿐입니다. 그런 다음 cd
대상 디렉터리로 이동하여 를 실행하면 pastefiles
각 cp
소스 파일에 대한 명령이 실행됩니다. Pastefiles는 이전에 파일을 "잘라낸" 경우 소스 파일도 삭제합니다(또는 삭제를 시도합니다). 이는 기존 파일에 대한 오류 검사를 수행하지 않으며, 이로 인해 cp
파일이 손상되거나 "잘라내기" 중에 해당 파일을 삭제할 수 있는 권한이 있거나 이동한 후 소스 디렉터리를 다시 방문할 수 있습니다.
답변3
~-
나는 이것이 정답이라고 생각 하지만 bash에는내장 라인 편집기텍스트를 복사/붙여넣기가 가능합니다.
emacs 모드에 있다면 cd
기록에서 명령을 호출하고 다음을 Control-u사용할 수 있습니다.죽이다bash "클립보드"에 들어가는 줄을 킬링(kill-ring)이라고 합니다(다른 방법도 있습니다). 그럼 넌 할 수 있어바보이 문자열을 새로운 명령으로 자유롭게 변환하세요 Control-y. 분명히 귀하의 예에서는 명령에서 절대 디렉토리 이름을 사용하는 것에 달려 있습니다 cd
.
흥미로운 기본 키 바인딩을 사용할 수도 있습니다 Meta-.. 이것마지막 단어 복사이전 명령에서 현재 줄까지. 반복하면 매번 기록의 명령이 반환됩니다. 따라서 을 수행하면 cd /x
입력에 cd /y
다음이 포함됩니다.cd
Meta-.Meta-./x
답변4
첫 번째 디렉토리에 있을 때 소스라고 말하거나 src
짧게 실행해 보겠습니다.
src=${PWD}
그런 다음 cd
두 번째 디렉터리로 이동하여 다음을 실행합니다.
cp -i ${src}/filename .
이 -i
옵션은 덮어쓸지, 중복된 파일이 있는지 묻습니다.