내 디렉토리에 파일이 있습니다/a/b/c/xxxxx.sql
/a/b/d
더 이상 하위 디렉터리가 없는 다른 디렉터리가 있습니다 .
디렉토리에 새 파일을 가져오려면 단일 명령으로 xxxxx.sql
어떻게 복사해야 합니까?/a/b/d
/a/b/d/c/xxxxx.sql
답변1
사용 install
명령:
install -D -m644 /a/b/c/xxxxx.sql /a/b/d/c/xxxxx.sql
에서 man install
:
install
- 파일 복사 및 속성 설정
644
원하는 것을 수정하여 Unix 권한을 선택할 수 있으며, 755
이 명령은 주로 소프트웨어 배포에 사용되기 때문에 기본값입니다. 무시 당하다 umask
.
이 명령은 존재하지 않는 경우 모든 디렉터리 구조를 투명하게 생성합니다 -D
.
-D
DEST
마지막 구성요소를 제외한 모든 주요 구성요소를 생성 하거나--target-directory
다음의 모든 구성요소를 생성합니다.SOURCE
DEST
rwxr-xr-x
그럼에도 불구하고 755
기존umask
디렉터리의 권한은 수정되지 않습니다.
답변2
GNU cp를 사용하여 다음 옵션을 사용하여 새 디렉터리에서 보려는 경로의 시작점에서 복사합니다 --parents
.
cd /a/b &&
cp --parents c/foo d
예:
% cp --parents c/foo d --verbose
c -> d/c
'c/foo' -> 'd/c/foo'
단일 명령으로 만드십시오.
{ cd /a/b && cp --parents c/foo d; } # compound command
env -C /a/b cp --parents c/foo d # simple command assuming BSD/GNU env
를 사용하면 파일 유형, 권한, ACL, 확장 속성, 희소성 및 소유권(시스템에서 허용하는 경우)을 포함하여 -a
디렉터리 및 파일의 모든 속성이 소스에서 복사됩니다 .cp
c
foo
답변3
당신은 그것을 사용할 수 있습니다동기화상대적인 옵션.
rsync --relative /a/b/./c/xxxxx.sql /a/b/d/
.
구분된 경로가 시작되어야 하는 위치를 기록해 두십시오 --relative
.
전체 디렉터리( )를 이동하려면 파일을 재귀적으로 복사하도록 플래그를 c
추가하는 것을 잊지 마세요 .--recursive
답변4
자신만의 명령을 실행할 수도 있습니다. 이는 기능적 구현이지만 실행 가능한 스크립트 어딘가에 변형을 똑같이 넣을 수도 있습니다.$PATH
mdcopy() {
mkdir -p -- "$2" &&
cp -p -- "$1" "$2"
}
용법
mdcopy /a/b/c/xxxxx.sql /a/b/d/c
이 접근 방식의 한 가지 장점은 원하는 유틸리티를 얻을 수 있다는 것입니다. 이 구현에는 두 번째 인수로 디렉터리가 필요하지만 파일 경로 이름을 두 번째 인수로 예상하도록 동일하게 조정할 수 있습니다. 이것이 당신에게 가장 좋은 것입니다.