ファイル名のバイト数の計算

ファイル名のバイト数の計算

ファイル名の重さが何バイトかどうかはどうすればわかりますか?フルパスではないファイルのみ。私はこれを試しました:

echo 'filename.extension' | wc -c

これは正しいですか?

答え1

よさそうですが、echoは基本的に末尾の改行を追加するので、echo -norもprintf同様です。 /path/to/files/like/this/filename.extension を filename.extension に変換する場合:

filepath='/path/to/files/like/this/filename.extension'
namelength=$(printf "%s" "$(basename "${filepath}")" | wc -c)

欲しいなら特徴(または同様のもの)長さ、いいえバイト計算:
POSIX互換シェル(bashやzshなど)にはより簡単な方法があるので、おそらくそれらの1つを使用しているでしょう。

filename="${filepath##*/}"
namelength=${#filename}

拡張は${#varname}変数の長さを直接提供します。

答え2

ファイル名をテストするのではなく、文字列だけをテストするだけです。しかし、速くて汚いハッキングはどうですか?

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char **argv) {
            int fcount = 1;
            int ret = 0;
            struct stat fstat_details;
    
            while (fcount != argc) {
                    ret = stat (argv[fcount], &fstat_details);
    
                    if (ret == 0) {
                            printf ("file: %s, length: %lu\n", argv[fcount], strlen(argv[fcount]));
                    } else {
                            printf ("file %s not found\n", argv[fcount]);
                    }
                    fcount++;
            }
            return(0);
    }

関連情報