파일을 /a/b/c/d.txt에서 /x/a/b/c/d.txt로 이동하여 존재하지 않는 경우 전체 트리를 생성합니다.

파일을 /a/b/c/d.txt에서 /x/a/b/c/d.txt로 이동하여 존재하지 않는 경우 전체 트리를 생성합니다.

디렉토리를 반복하면서 오래된 파일을 다른 위치로 옮기고 있습니다. 예를 들어. 오류 없이 이동 /a/b/c/d.txt하고 싶은 /x/a/b/c/d.txt경로에 있는 파일입니다 . 단일 명령으로 이것이 가능합니까? mv작동하지 않으면 와 cp의 조합이 rm작동합니까?

  • 한 번에 하나의 파일만 이동하면 됩니다.
  • 대상 트리가 이미 존재하는 경우 오류가 발생하지 않아야 합니다.
  • 대상 트리가 존재하지 않으면 생성됩니다.

이 게시물요건이 충족되지 않은 것 같습니다. 여러 줄의 코드를 사용하여 이 작업을 수행할 수도 있습니다. 그렇다면 미리 정의된 단일 라인 옵션을 갖는 것이 가능합니까? (프로그래밍 언어와 통합하고 싶습니다)

답변1

표준 명령만 사용해야 하는 경우 원하는 명령이 아닐 수도 있지만 rsync도움이 될 수 있습니다.

$ mkdir a a/b a/b/c; echo foo >a/b/c/d.txt; tree a
a
└── b
    └── c
        └── d.txt

2 directories, 1 file
$ rsync --relative --remove-source-files a/b/c/d.txt x/
$ tree a x
a
└── b
    └── c
x
└── a
    └── b
        └── c
            └── d.txt

5 directories, 1 file

~에서수동:

--relative, -R

상대 경로를 사용하십시오. 이는 파일 이름의 마지막 부분뿐만 아니라 명령줄에 지정된 전체 경로 이름이 서버로 전송된다는 의미입니다. ...

그리고

--remove-source-files

이는 전송의 일부이고 수신 측에서 성공적으로 복사된 파일(즉, 디렉터리가 아닌)을 전송 측에서 삭제하도록 rsync에 지시합니다.

관련 정보