여러 하위 폴더를 설치했습니다/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 에서 셸 옵션을 활성화하세요(단, 또는 는 제외). 그런 다음 사용bash
shopt -s dotglob
*
.
..
cp -Rn /mnt/1804iso/* /media/benny/0EB4-95E2/