나는 노력해왔다:
cp file.csv file.$(date +%D).csv
그러나 파일 이름이 별도의 디렉토리가 있는 슬래시이기 때문에 실패합니다 file.03/27/19.csv
.
나는 다시 시도했습니다 :
cp file.csv file.$(printf "%q" $(date +%D)).csv
하지만 여전히 실패합니다.
답변1
/
파일 이름, 마침표는 포함될 수 없습니다(ASCII 기반 시스템에서는 바이트 0x2F).
/
( ∕
U+2215 나누기 슬래시) 또는 (U+2044 분수 슬래시, 현재 로케일에서 사용되는 문자 집합에는 적지만) 과 같은 문자를 사용할 수 있으므로 ⁄
이 작업을 수행할 수 있습니다(U+2215 문자가 로케일에 존재하는 경우). GBK, BIG5, UTF-8, GB18030을 포함한 세트):
cp file.csv "file.$(date +%D | sed 's|/|∕|g').csv"
또는 일부 쉘을 사용하십시오( zsh
적어도 bash
).
cp file.csv "file.$(date +%D | sed $'s|/|\u2215|g').csv"
( GNU를 포함한 일부 구현이 여전히 멀티바이트 문자를 지원하지 않기 때문에 여기에서는 sed
대신 사용되었습니다 .)tr
tr
tr
그러나 파일이 생성될 때 사용된 것과 다른 문자 세트를 사용하여 로케일에서 파일 이름이 다르게 렌더링되는 등의 문제가 발생할 수 있습니다. (물론 사용자는 슬래시가 혼동된 것처럼 보이는 것을 보면 혼란스러울 것입니다.) .
내 제안은 모호하지 않은 표준 형식을 사용하는 것입니다(예: 미국 이외의 대부분의 사람들에게 2018년 12월 3일은 2018년 12월 3일로 해석됩니다) YYYY-mm-dd 형식(이것은 wrt 정렬에도 도움이 됩니다 ) .
cp file.csv "file.$(date +%Y-%m-%d).csv"
많은 date
구현을 통해 다음과 같이 단축할 수 있습니다.
cp file.csv "file.$(date +%F).csv"