존재하는 경우 mkdir -p는 오류를 반환합니다.

존재하는 경우 mkdir -p는 오류를 반환합니다.

Raspbian Stretch Lite:

$ mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.

Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit

내가 쓴 스크립트에서는 다음과 같습니다.

mkdir -p /mnt/target/home/user/resources

어디에 /mnt/target/home/user/resources존재할 수 있습니까? 이 경우 스크립트는 다음 오류와 함께 중지됩니다.

mkdir: '/mnt/target/home/user/resources' 디렉터리를 만들 수 없습니다. 파일이 존재합니다.

그러나 매뉴얼 페이지에는 오류가 존재하는 경우 오류를 반환해서는 안 된다고 되어 있습니다!

고쳐 쓰다

파일이 없습니다 resources:

$ ls -la /mnt/target/home/user/
totale 13
drwxr-xr-x 4 mark      mark      1024 gen 10 16:56 .
drwxr-xr-x 4 root      root      1024 gen 10 16:56 ..
-rw-r--r-- 1 mark      mark       220 nov 13 14:09 .bash_logout
-rw-r--r-- 1 mark      mark      3523 nov 13 14:09 .bashrc
drwxr-xr-x 3 root      root      1024 gen 10 16:56 bin
-rw-r--r-- 1 mark      mark       675 nov 13 14:09 .profile
drwxr-xr-x 2 root      root      4096 gen  1  1970 resources

업데이트 2

스크립트의 주변 코드는 다음과 같습니다.

losetup -P /dev/loop0 image.img
e2fsck -f /dev/loop0p2
resize2fs /dev/loop0p2
mkfs.ext4 /dev/loop0p3
e2fsck -f /dev/loop0p3
mkfs.vfat -F 32 /dev/loop0p4

mount /dev/loop0p2 /mnt/target

cd /mnt/target/home/
tar cf home.tgz user/
rm -r user/

mount /dev/loop0p1 /mnt/target/boot/
mount /dev/loop0p3 /mnt/target/home/

tar xf home.tgz -C /mnt/target/home/

#mkdir -p /mnt/target/home/user/resources
mount /dev/loop0p4 /mnt/target/home/user/resources

image.img4개의 파티션을 포함합니다.

답변1

mount /dev/loop0p2 /mnt/target
cd /mnt/target/home/
mount /dev/loop0p3 /mnt/target/home/
mkdir -p /mnt/target/home/user/resources

mkdir작업 디렉터리를 /homeon 으로 설정하여 전화를 걸고 있습니다 /dev/loop0p2. 작업 디렉토리는 이전에는 path를 통해 액세스할 수 있었지만 /mnt/target/home이제는 숨겨졌습니다 /dev/loop0p3. 호출할 때 mkdirpath는 의 디렉토리를 참조합니다 /mnt/target/home.//dev/loop0p3

왜 작업 디렉토리에 관심이 있는지 이해할 수 없지만 mkdir이상해 보입니다. 질문에 스크립트를 표시하기 전에 스크립트를 단순화했다면 현재 겪고 있는 문제는 마운트 지점 뒤에 숨겨진 디렉토리가 복잡해서 발생했을 가능성이 높습니다.

따라서 설치하기 전에 종료해 보십시오 cd. 아니면 /mnt/target/home전혀 사용하지 마시고 통화옵션과 을 이용하세요.cd-Ctarrm

일반적으로 어떤 방식으로든 사용되는 디렉토리에 무언가를 설치하지 마십시오. 대상 디렉터리는 비어 있어야 하며 프로세스의 작업 디렉터리가 아니어야 합니다. 운영 체제는 옳은 일을 할 것이지만 그것이 옳다고 생각하는 것은 놀랄 수 있으며, 이는 어쨌든 인간과 소프트웨어를 혼란스럽게 할 수 있습니다.

관련 정보