다음 명령을 실행할 때 Cannot mkdir: No such file or Directory에 대한 오류가 발생합니다. 나는 이것이 경로 이름의 \와 관련이 있다고 생각합니다. 이 문제를 어떻게 해결하나요?
저는 Centos에서 이것을 실행하고 있습니다.
tar xf dpdk-17.02.tar.xz
tar: dpdk-17.02/app/test/test_pci_sysfs/bus/pci/devices/0000\:01\:00.0: Cannot mkdir: No such file or directory
tar: dpdk-17.02/app/test/test_pci_sysfs/bus/pci/devices/0000\:01\:00.0: Cannot mkdir: No such file or directory
tar: dpdk-17.02/app/test/test_pci_sysfs/bus/pci/devices/0000\:01\:00.0/class: Cannot open: No such file or directory
tar: dpdk-17.02/app/test/test_pci_sysfs/bus/pci/devices/0000\:01\:00.0: Cannot mkdir: No such file or directory
tar: dpdk-17.02/app/test/test_pci_sysfs/bus/pci/devices/0000\:01\:00.0/config: Cannot open: No such file or directory
tar: dpdk-17.02/app/test/test_pci_sysfs/bus/pci/devices/0000\:01\:00.0: Cannot mkdir: No such file or directory
tar: dpdk-17.02/app/test/test_pci_sysfs/bus/pci/devices/0000\:01\:00.0/consistent_dma_mask_bits: Cannot open: No such file or directory
더 자세한 정보를 얻기 위해 strace를 시도했는데 다음은 오류 중 하나의 결과입니다.
mkdirat(AT_FDCWD, "dpdk-17.02", 0755) = -1 EEXIST (File exists)
mkdirat(AT_FDCWD, "dpdk-17.02/app", 0755) = -1 EEXIST (File exists)
mkdirat(AT_FDCWD, "dpdk-17.02/app/test", 0755) = -1 EEXIST (File exists)
mkdirat(AT_FDCWD, "dpdk-17.02/app/test/test_pci_sysfs", 0755) = -1 EEXIST (File exists)
mkdirat(AT_FDCWD, "dpdk-17.02/app/test/test_pci_sysfs/bus", 0755) = -1 EEXIST (File exists)
mkdirat(AT_FDCWD, "dpdk-17.02/app/test/test_pci_sysfs/bus/pci", 0755) = -1 EEXIST (File exists)
mkdirat(AT_FDCWD, "dpdk-17.02/app/test/test_pci_sysfs/bus/pci/devices", 0755) = -1 EEXIST (File exists)
mkdirat(AT_FDCWD, "dpdk-17.02/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0", 0755) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "dpdk-17.02/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0", 0x7ffe85312de0, 0) = -1 ENOENT (No such file or directory)
write(2, "tar: ", 5) = 5
write(2, "dpdk-17.02/app/test/test_pci_sys"..., 79) = 79
write(2, ": No such file or directory", 27) = 27
write(2, "\n", 1) = 1
write(2, "tar: ", 5) = 5
write(2, "dpdk-17.02/app/test/test_pci_sys"..., 85) = 85
답변1
이는 기호 링크 때문일 수 있습니다. tar가 'strace'를 통해 무엇을 하고 있는지 보는 것이 가치가 있을 수 있습니다(tar 명령 앞에 접두사만 붙이면 됩니다 strace
).
tar가 수행하려는 작업과 실패한 작업을 strace 출력에서 확인해야 합니다.
답변2
Windows 파일 이름 규칙 및 제한 사항을 따르는 CIFS에 있는 홈 디렉터리에서 tar를 수행하고 있습니다. CIFS(Windows)에서는 콜론이 허용되지 않습니다. 문제 없이 로컬 파티션에서 동일한 작업을 다시 수행했습니다.