파일 이름이 너무 길지 않도록 txt 파일의 각 줄에서 새 파일을 만듭니다.

파일 이름이 너무 길지 않도록 txt 파일의 각 줄에서 새 파일을 만듭니다.

.txt 파일의 각 텍스트 줄에 대해 새 파일을 만들고 있습니다.

file=/tmp/textFile.txt
while IFS= read -r line
do
        printf "%s\n" "$line" > /tmp/"$line"txt
done < "$file"

파일 이름이 너무 길다는 오류 메시지가 계속 나타납니다. 새 파일의 제목을 특정 문자 수로 줄이는 방법이 있나요?

답변1

ig를 사용하여 awk한 줄의 내용을 최대 100자의 파일 이름으로 출력합니다(앞에 /tmp/, 뒤에 .txt).

awk '{ name = "/tmp/" substr($0,1,100) ".txt"; print >name; close(name) }' /tmp/textFile.txt

예를 들어, 각 이름의 및 문자를 사용하여 작업을 수행해야 하는 경우 /해당 문자를 밑줄로 변경합니다(이렇게 하면 디렉토리의 파일 외에 파일 시스템의 임의 파일을 덮어쓰는 것을 방지할 수 있습니다)../tmp

awk '{ name = "/tmp/" substr($0,1,100) ".txt"; gsub("[/.]","_",name); print >name; close(name) }' /tmp/textFile.txt

답변2

예를 들어 줄을 252자( txt추가하면 255자가 됨)까지 줄일 수 있습니다.

while IFS= read -r line
do
    printf "%s\n" "$line" > /tmp/"${line:0:252}"txt
done< /tmp/textFile.txt

이것매개변수 확장ksh93에서는 Bash 및 최신 버전의 zsh에서도 지원되지만 sh.Native zsh 구문은 $line[1,252]또는 ${line[1,252]}에서도 지원 됩니다 yash.

어쨌든 파일 시스템에 따르면,한계양이 많은 경우가 많습니다바이트양보다는수치1. 텍스트에 멀티바이트 문자가 포함된 경우 위 방법이 제대로 작동하지 않을 수 있습니다.


é1 macos는 문자(예: 분음 부호가 있는 문자) 를 U +00E9 사전 조립 형식 대신 저장된 문자의 분해된 형식(예: U+0065 및 U+0301) 으로 분해할 수 있으므로 더 복잡해질 수 있습니다 .

관련 정보