.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) 으로 분해할 수 있으므로 더 복잡해질 수 있습니다 .