폴더의 모든 파일을 다른 폴더에 복사하고 파일 이름에 .

폴더의 모든 파일을 다른 폴더에 복사하고 파일 이름에 .

다양한 방법을 검색하고 시도한 후에도 제대로 작동하지 않습니다.

많은 수의 파일(100,000개 이상의 파일)을 다른 폴더에 복사하고 파일 이름 시작 부분에 점을 추가해야 합니다.

예:

  • /foo/bar/filename1.txt도착하다/foo2/bar/.filename1.txt
  • 그런 다음 원래 이름으로 다시 이름을 바꿉니다./foo2/bar/filename.txt

이 작업을 수행해야 하는 이유는 폴더를 계속 검색 /foo2/bar하고 파일 이름 앞에 점이 있는 파일을 무시하여 복사 중인 파일을 처리하지 않도록 하는 응용 프로그램이 있기 때문입니다. 이는 주로 이 2개의 폴더가 2개의 서로 다른 네트워크 드라이브 또는 일부 마운트된 장치에 위치할 수 있기 때문입니다.

너무 많은 파일이 포함된 일부 폴더가 있고 인수 목록이 너무 긴 오류가 발생하기 때문에 단순히 mv 또는 cp를 사용할 수 없습니다. 그래서 find 명령을 사용해 보았지만 소용이 없었습니다.

다른 명령을 사용해 보십시오:

find /foo/bar/ -type f -exec cp -t /foo2/bar {} +

그리고

find /foo/bar/ -type f -exec mv {} /foo2/bar/.{} \;

나는 위의 명령이 내가 원하는 것을 하지 않을 것이라는 것을 알고 있으며 그것이 내가 지쳤던 것입니다.

도움을 주실 수 있는 분에게 감사드립니다...

답변1

rsync -a -T tmpdir /foo/bar/ /foo2/bar

/( 마지막 내용이 중요하니 참고해주세요 /foo/bar/.)

유틸리티는 파일을 올바른 이름으로 이동하기 전에 파일에 기록합니다 rsync. 예를 들어 다음 숨겨진 디렉터리를 사용하여 전송 중인 파일을 저장할 수 있습니다.tmpdir/foo2/bar/foo2/bar

mkdir -p /foo2/bar/.tmp
rsync -a -T /foo2/bar/.tmp /foo/bar/ /foo2/bar

또한 rsync설명서, 특히 이 옵션에 대한 섹션을 참조하세요 -T.

위 명령은 재귀를 /foo/bar에 복사합니다 /foo2/bar. 재귀를 비활성화하려면 다음을 사용합니다 rsync -a --no-recursive ...(이 -a옵션은 재귀와 파일 메타데이터 동기화를 활성화하고 --no-recursion재귀 측면만 끕니다 -a).

관련 정보