ファイル名が長すぎないように、txt ファイルの各行に新しいファイルを作成します。

ファイル名が長すぎないように、txt ファイルの各行に新しいファイルを作成します。

.txtファイルの各テキスト行に対して新しいファイルを作成しています。

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

ファイル名が長すぎるというエラーメッセージが表示され続けます。新しいファイルのタイトルを特定の文字数に減らす方法はありますか?

答え1

igを使用して、awk1行の内容を最大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)に分解できるため、より複雑になる可能性があります。

関連情報