복사 [cp 사용] 문제

복사 [cp 사용] 문제

여러 하위 폴더를 설치했습니다/mnt. 하나는/mnt/데이터,다른 하나는/mnt/1804iso. 이것/데이터다른 디스크에서 설치된 데이터 폴더 및 파일을 포함합니다./1804iso폴더에 복사하려는 콘텐츠가 포함된 마운트된 ISO 파일을 포함합니다./미디어/베니/0EB4-95E2/이것은 마운트된 플래시 드라이브입니다.

그래서 열었어요세게 때리다그리고 입력sudo cp -Rn /mnt/1804iso/.* /media/benny/0EB4-95E2/. 나는 보통 와일드카드 별표 앞의 마침표를 생략합니다./*/, 하지만 이렇게 하면 ISO의 숨겨진 파일이 복사되지 않습니다. 그래서 이 명령을 사용하면 이상한 일이 발생합니다. ISO 파일이 올바르게 복사되면 복사가 시작됩니다./mnt/데이터폴더나 파일도 마찬가지입니다. 명령 부분에 대한 이해가 /mnt/1804iso/.*완전히 결함이 없는 한 폴더가 참조되지 않기 때문에 왜 이런 일이 발생하는지 이해할 수 없습니다 .

/mnt/data폴더가 사본에 포함된 이유를 누군가 설명해 줄 수 있나요?

답변1

.*숨겨진 파일로 확장되며 .이는 ..Bash의 불행한 부분입니다.파일 이름 확장자유효함: 첫 글자와 임의 개수의 문자로 구성되어 일치 ..하고 포함되는 이름의 디렉터리 항목이 있습니다 ...*

예를 들어 다음을 실행하면 이러한 상황이 발생하는 것을 볼 수 있습니다.

echo /mnt/1804iso/.*

나머지 부분과 함께 나열되고 /mnt/1804iso/.나열 됩니다 /mnt/1804iso/...

../data귀하의 디렉토리입니다 data. 대상에서 다음과 같은 디렉토리 구조가 생성됩니다.

.hidden
xyz
data/
data/...
1804iso/.hidden
1804iso/xyz
...

즉, 실제로는복사하고 싶은 모든 것의 복사본과 복사하고 싶지 않은 모든 것의 복사본. 를 사용하면 cp -Rnv무엇을 복사하고 있는지, 어디에 복사하는지 확인할 수 있습니다.

이를 위해서는 다른 껍질이 더 좋습니다. zsh에서는 원하는 것에 더 가깝습니다.오직숨겨진 파일이 복사됩니다. Bash에서는 다음 cp src/.[^.]* dest을 사용할 수 있습니다.거의zsh 동작을 일치시키고 두 소스 위치를 모두 나열합니다. 아니면 할 수 있습니다shopt -s dotglob미리 달려가세요, src/*그러면 다음으로 확장됩니다.포함하다파일을 클릭하지만들어오지 못하게 하다.및 항목 ..(단, 나중에 하기 싫은 일을 하게 될 수도 있으니 주의하세요).


당신이 정말로하고 싶은 일을 위해서는 다음을 사용하는 것이 좋습니다.동기화대신에:

rsync -avx /mnt/1804iso/ /media/benny/0EB4-95E2/

복사됩니다콘텐츠1804iso숨겨진 파일을 포함하여 대상 디렉터리(마지막 슬래시에 주의하세요!) 로 이동합니다.

답변2

패턴은 /mnt/1804iso/.*디렉토리 항목으로 확장될 수 있으며 /mnt/1804iso/..이는 /mnt. 그것 때문에 복제가 시작된 것 같아요 /mnt/data.

이 경우에는 다음을 사용합니다 rsync.

rsync -ai /mnt/1804iso/ /media/benny/0EB4-95E2

이렇게 하면 /mnt/1804iso숨겨진 파일을 포함한 모든 항목이 원본 디렉터리로 복사 됩니다 /media/benny/0EB4-95E2. /원본 디렉터리의 끝 부분을 생략하면 대상 디렉터리 아래에 디렉터리가 생성됩니다 1804iso.

또는 dotglob숨겨진 이름과 숨겨지지 않은 이름을 모두 일치시키려면 with 에서 셸 옵션을 활성화하세요(단, 또는 는 제외). 그런 다음 사용bashshopt -s dotglob*...

cp -Rn /mnt/1804iso/* /media/benny/0EB4-95E2/

관련 정보