Linux에서 파일 및 폴더를 재귀 적으로 이동


75

치다:

ls -al ../public-back
drwxrwxr-x  4 apache   apache     4096 Apr 19 03:32 templates

ls -al ../public-back/templates

drwxrwxr-x  2 apache   apache    4096 Apr 19 03:33 content
drwxrwxr-x  2 apache   apache   20480 Apr 20 06:14 images
drwxrwxr-x  2 apache   apache    4096 Apr 19 03:35 video

ls -al /public

drwxrwxr-x  4 apache   apache     4096 Apr 20 09:49 templates

ls -al /public/templates

drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 content
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 images
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 video

/public-back/templates권한 이있는 재귀 적으로 내용을 어떻게 옮길 수 /public/templates있습니까?


mv ../public-back/templates/* public / templates /

mv -R ../public-back/templates/* public/templates/나는 여전히 질문을 옮기기 위해 투표하고있다.

2
mv : 잘못된 옵션-R @Vladislav Zorov

3
나는 cp -a ../public-back/templates/ public /

답변:


92

내가 질문을 오해하지 않는 한, 이것은 효과가 있습니다.

mv /public-back/templates/* /public/templates

또한 파일 목록이 크지 않은 경우 추가 -i는 파일 을 덮어 쓰기 전에 묻습니다 *. 이렇게 하면 와일드 카드를 사용할 때 안전성이 향상됩니다 .


14
숨겨진 파일은 이동하지 않습니다.
Arda

2
숨겨진 파일도 이동되도록 dotglob 설정에 대해서는 askubuntu.com/a/259386/358964 를 참조하십시오 .
mkobit

3
참고 : 하위 디렉토리의 파일은 덮어 쓰지 않습니다. 당신은 얻을 것이다 Directory not empty메시지를.
Armstrongest

디렉토리 계층 구조를 평탄화 한 것으로 보입니다. 나를 위해 원래 폴더 내에 폴더를 보존하지 않았습니다. 모든 파일은 원래 폴더를 그대로 같은 구조로 옮기지 않고 동일한 폴더에 넣었습니다.
Robert Noack

이 솔루션은 작동하지만이 오류가 표시 mv: target '/public/templates' is not a directory되면 대상 폴더를 수동으로 작성하십시오 mkdir /public/templates.
Ali Shabdar

8

cp 상태의 매뉴얼 페이지 :

-p same as --preserve=mode,ownership,timestamps
-r same as --recursive=copy directories recursively

시험;

cp -rp /public-back/templates/* /public/templates/

13
mv위한 이동 하면서 cp위한 사본 의미 론적 / 어원 구분 -.
Marius Butuc

cp보다 속도가 느립니다 mv. cp컴퓨터에서 디스크의 모든 내용을 RAM으로 복사 한 다음 디스크에 다시 쓰면 파일 크기에 따라 시간이 오래 걸릴 수 있습니다. 그러나 mv링크 만 다시 작성하면되므로 항상 즉시 발생합니다.
tjespe

4

썸 드라이브에서 OSMC 시스템으로 항목을 이동할 때 다음이 매우 유용하다는 것을 알았습니다.

find /media/Pi\ Hard\ 16GB/ -name '*' -exec mv -v {} /media/External\ HDD/Videos/ \;

작동 방식에 대한 설명은 다음과 같습니다.

BTW, 소스 또는 대상 디렉토리 이름에서 공백 앞에 백 슬래시를 추가하는 것을 잊지 마십시오 (위 참조).

find  finds all files and folders in the destination path.

/media/Pi Hard 16GB/ is the path searched. Escape special char such as spaces.

-name '*' filters on names. If you do not escape or quote this then 
          the shell will expand it before find sees it.

-exec     Executes a command, in our case mv

-v        Verbose, so you can see what's happening (optional)

{}        is replaced by the name of the found object.

효과적으로 모든 파일과 모든 폴더를 찾고 하나씩 이동합니다 (또는 디렉토리를 먼저 찾은 경우 해당 디렉토리와 그 내용을 이동 함). 이것은 각 이동에 대해 새로운 프로세스를 시작하며 매우 비효율적입니다. 일반 명령이 실패한 경우에만 사용하십시오.


2

mv는 이것을하지 않는 것 같습니다. 그러나이 작은 트릭을 사용할 수 있으며 매력처럼 작동합니다.

tar cf - . |(cd /targetdir; tar xvf -)

권한과 모든 것을 유지합니다.

참고 : 위의 어느 것도 나를 위해 일한 적이 없으므로이 해결 방법입니다.


1
cp -a --link ../public-back/* /public/.  &&  rm -rf ../public-back

따라서 대상 디렉토리에 하드 링크를 작성하고 소스 디렉토리를 제거하십시오. 'mv'는 귀하의 경우에는 작동하지 않으며 일반적으로 source dir 및 dest에 공통 하위 트리가없는 경우에만 작동합니다.

질문에서 'move'라는 단어는 작업 후 소스 디렉토리가 사라져야 함을 의미한다고 가정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.