한 경로에서 특정 디렉토리를 찾고 find를 사용하여 다른 경로의 디렉토리를 이동하려고 합니다.
소스 디렉토리는 아래와 같습니다.
/Dir1/country1/month1/date1,date2,date3
/Dir1/country2/month1/date1,date2,date3
...
.
.
/Dir1/country10/month1/date1,date2,date3
date1 디렉토리를 찾아 목적지로 이동하려고 합니다.
/백업/소스1/Dir1/
아래 명령을 사용하고 있습니다
[root@mytest Dir1]# find -name "date1" -exec mv {} /Backup/source1/Dir1/{} \;
아래 오류가 발생합니다.
mv: `/Backup/source1/Dir1/./country1/month1/date1/date1/date1_1.txt'에 대한 소유권을 유지하지 못했습니다. 작업이 허용되지 않습니다.
대상 및 디렉토리에서 date1 디렉토리의 중복을 제거하는 방법을 잘 모르겠습니다."./"이슈도 만들고 있어요.
최고의 소원, KJ
답변1
그만큼리눅스 매뉴얼 페이지상태:
mv - 파일 이동(이름 바꾸기)
mv
따라서 디렉토리를 이동하는 데 사용할 수 없습니다 . 그러나 먼저 복사한 다음 이전 복사본을 지울 수도 있습니다. 이 명령
SRC_DIR=$(find . -type d -name date1 -print); echo $SRC_DIR
관심 있는 디렉터리의 상대 경로를 편리한 변수에 저장합니다. 이제 새 위치에 디렉토리를 만들 수 있습니다.
mkdir /Backup/source1/$SRC_DIR
그렇게 할 수 있는 권한이 있는 경우: 사실 위의 오류 메시지는 새 파일을 생성할 수 있는 권한이 충분하지 않다는 것입니다(폴더여야 했지만 위의 오류로 인해 파일이 되었습니다). 새 /Backup/dir1이 귀하의 것이 확실합니까? 그걸 확인하고 고쳐야 합니다.
이제 모든 콘텐츠를 새 디렉터리에 재귀적으로 복사할 수 있습니다.
cp -R $SRC_DIR/* /Backup/dir1/$SRC_DIR
cp -R $SRC_DIR/.[a-Z]* /Backup/dir1/$SRC_DIR
마지막으로 다음과 같은 경우 이전 복사본을 지울 수 있습니다.
cd $SRC_DIR
rm -fR *
rm -fR .[a-Z]*
이제 디렉토리는 비어 있으므로 지울 수 있습니다.
답변2
Blunt 도구인 이동을 사용하는 대신 권한과 소프트 및 하드 심볼릭 링크를 모두 유지하는 아카이브 모드에서 디렉터리 트리를 이동할 수 있는 rsync를 확인하세요.
또한 루트로 입력하면 설치된 패키지의 다양한 경로 트리에 있는 파일 데이터베이스가 updatedb
업데이트됩니다 . locate
바이너리, 매뉴얼 페이지 및 소스 트리. whereis
또는 를 사용하여 검색하는 것이 locate
매번 실제 디스크 검색을 수행하는 것보다 훨씬 빠릅니다.