두 개의 변수로 파일 이름을 만들려고 합니다.
오류 메시지는 다음과 같습니다.
touch: cannot touch `/root/tinstalls/2--06/06/15': No such file or directory
2--06/06/15 19:54
코드는 다음과 같습니다.
tdate=$(date '+%D %R')
tfile=$(echo "${toadd}--${tdate}")
touch /root/tinstalls/${tfile}
echo $tfile
디렉토리가 거기에 있습니다.
답변1
@Theophrastus는 올바른 생각을 가지고 있습니다.~에 따르면POSIX"[파일] 이름을 구성하는 문자는 모든 문자 값 집합에서 선택할 수 있습니다.슬래시 문자 제외및 null 바이트"(강조). 즉, 각 문자열은~ 사이슬래시 2개(빈 문자열 제외)은 다른 디렉토리이고 당신은할 수 없다이름에 슬래시가 포함된 파일을 만듭니다. 따라서 이 작업을 시도하면 touch /root/tinstalls/2--06/06/15
시스템은 15
절대 경로를 사용하여 디렉터리에 파일을 생성 하려고 시도합니다 /root/tinstalls/2--06/06
.
이 문제를 수정하는 간단한 방법은 파일 이름의 모든 슬래시를 밑줄로 바꾸는 것입니다.
touch "/root/tinstalls/${tfile//\//_}"
답변2
터치하면 디렉토리를 생성할 수 없습니다. 예를 들어 이봐
"바로 거기에 디렉토리"가 있는 것 같습니다. 하지만 날짜 형식에 더 많은 디렉터리가 필요한 "/" 문자가 포함되어 있다는 사실을 알고 계셨나요?
답변3
다른 사람들이 이미 설명했듯이 문제는 디렉토리를 만들려고 할 date
때 슬래시 에 있습니다. touch
그러지 못하니 불평을 합니다. 가장 간단한 해결책은 날짜 형식을 변경하는 것입니다. 대신에:
$ date '+%D %R'
06/07/15 13:47
이것을 사용하십시오 :
$ date '+%F %R'
2015-06-07 13:52
또는 더 나은 방법은 공백 처리를 피하고 다음을 사용하는 것입니다.
$ date '+%F-%R'
2015-06-07-13:52
마지막으로, 공백을 포함해야 한다면 전달할 때 이름을 인용해야 합니다.touch
touch /root/tinstalls/"${toadd}--$(date '+%F %R')"
답변4
@Theophrastus는 올바른 생각을 가지고 있습니다. POSIX에 따르면 "[파일] 이름을 구성하는 문자는 슬래시 문자와 널 바이트를 제외한 모든 문자 값 집합에서 선택될 수 있습니다"(강조). 즉, 두 슬래시 사이의 모든 문자열(빈 문자열 제외)은 또 다른 디렉터리이므로 이름에 슬래시가 포함된 파일을 만들 수 없습니다. 따라서 /root/tinstalls/2--06/06/15를 터치하려고 하면 시스템은 절대 경로 /root/tinstalls/2--06/06을 사용하여 디렉터리에 파일 15를 생성하려고 시도합니다.
이 문제를 수정하는 간단한 방법은 파일 이름의 모든 슬래시를 밑줄로 바꾸는 것입니다.
touch "/root/tinstalls/${tfile//\//_}"