감동적인 질문: 2개의 변수로 파일 이름 만들기

감동적인 질문: 2개의 변수로 파일 이름 만들기

두 개의 변수로 파일 이름을 만들려고 합니다.

오류 메시지는 다음과 같습니다.

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//\//_}"

관련 정보