파일 이름의 텍스트에서 변수 할당

파일 이름의 텍스트에서 변수 할당

파일 이름의 문자를 기반으로 디렉터리 구조를 만들려고 합니다(파일 이름에는 파일 쓰기가 시작된 날짜와 시간이 포함됩니다). 파일 이름에서 특정 "열"을 읽고 인쇄하는 방법을 알아냈습니다. 하지만 이제는 정수로 저장하는 방법을 모르겠습니다. 추가하려는 코드는 다음과 같습니다.

#!/bin/bash
FILES=samplefilenames*
for file in ${FILES}; do
    echo "${file}" | awk -F'[-_]' '{print $8}'
done
exit $ERRORS

파일 이름에 "-"와 "_"가 있으므로 구분 기호가 있습니다. 내가 찾고 있는 값을 성공적으로 인쇄하도록 할 수 있습니다. 하지만 이 값을 변수에 할당할 수는 없습니다. 이것은 문자 그대로의 경우입니다

tempNum=echo "${file}" | awk -F'[-_]' '{print $8}'

어떤 도움이라도 대단히 감사하겠습니다.

편집하다:

소스 파일 이름 예 - Samplefilenames_2017-10-31_12-23-13.csv(파일 이름에는 모두 이 형식의 날짜/시간 스탬프가 포함되어 있음) 디렉토리 구조로 하고 싶은 것은 수백 개의 파일을 한 곳에 두는 대신에 여기에 배치하는 기존 파일에 코드를 추가하는 것입니다. 날짜별로 디렉토리에 정리하고 싶습니다. 첫 번째 수준에는 1월, 2월, 3월...(열 2)에 대한 폴더가 있고, 각 폴더 내에 해당 월의 각 날짜에 대한 하위 디렉터리(열 3)가 있으며, 각 폴더에는 다음에 대한 하위 디렉터리가 있습니다. 매 시간(그 날의 경우 열 4) 또한 내 파일 이름이 실제로 예제 길이보다 길기 때문에 내 코드의 열 8은 내 코드에서만 가져온 것입니다. 이에 따라 값이 변경되어야 함을 이해합니다.

답변1

다음과 같이 시도해 보세요.

#!/bin/bash
for filename in *.csv; do
    dateTime=($(basename "${filename}" .csv | awk -F_ '{ print $2, $3 }'))
    date="${dateTime[0]}"
    time="$(echo "${dateTime[1]}" | sed -e 's/-/:/g')"

    dir="$(date -d "${date} ${time}" +"%Y/%B/%d/%H")"

    mkdir -p "${dir}"
    mv "${filename}" "${dir}"
done

기본적으로 날짜와 시간을 구문 분석하고 이를 date명령이 사용하여 date찾고 있는 디렉터리 구조의 문자열 표현을 생성하는 데 사용할 수 있는 것으로 변환하고, 해당 디렉터리를 만들고, 파일을 해당 디렉터리로 이동합니다.

디렉토리 형식은 다음과 같습니다.

year/month/date/hour

연도를 포함하지 않으려면 %Y/명령 매개변수에서 생략할 수 있습니다 date.

나는 YMMV를 엄격하게 테스트하지 않았습니다.

답변2

(IFS=_-.; for f in *.csv; do set -- $f; echo $6; done)

관련 정보