.txtファイルの各テキスト行に対して新しいファイルを作成しています。
file=/tmp/textFile.txt
while IFS= read -r line
do
printf "%s\n" "$line" > /tmp/"$line"txt
done < "$file"
ファイル名が長すぎるというエラーメッセージが表示され続けます。新しいファイルのタイトルを特定の文字数に減らす方法はありますか?
答え1
igを使用して、awk
1行の内容を最大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)に分解できるため、より複雑になる可能性があります。