デフォルト名の追加オペランドエラー

デフォルト名の追加オペランドエラー

ファイルのデフォルト名を抽出して追加の操作を実行するために使用するスクリプトがあります。この名前付け規則(スペースと文字を含む - 何がエラーを引き起こすのかわからない)を持つファイルでこのスクリプトを使用すると、デフォルトの名前を追加するオペランドエラーが発生します。

ファイル名: JERASH - XZ 837367432.pdf

ここでスクリプトを実行するとエラーが生成されます。

filetimestamp=$(date "+%F-%T")
timenow=$(date -u)

    for file in files/input/*
    do

     printf "Break 1 \n" 
     #filename no extension:
     filenamenopath=$(basename $file)
     filenamenoext=${filenamenopath%.pdf}
     printf "Break 2 \n"
     #check if file is pdf

     printf "File Name with No Path:" $filenamenopath
     printf "Break 3 \n"

エラーは次のとおりです。

中断1基本名:追加オペランド「XZ」

答え1

このコマンドはbasename $file引用符なしで変数を使用します。変数の値は別々のパラメータに分割され(各パラメータもファイル名と一致します)、ユーティリティに提供されますbasename

このユーティリティには1つまたは2つのパラメータが必要です。 2つの引数がある場合は、ディレクトリパスなしでファイル名を返し、名前の末尾から2番目の引数も削除します(basename path/to/file.txt .txtreturnを容易にするためfile)。JERASH - XZ 837367432.pdfファイル名がいくつの単語に分割されているかに応じて、4つの引数を指定します。

代わりに、参照$file変数が拡張されます。

filenamenoext=$(basename "$file" .pdf)

filenamenopath後で他の目的に必要でない限り必須ではありません。)

また見なさい:

またprintf、変数データの印刷に使用する場合は、書式文字列を使用して変数を引用します。

printf 'Filename without path: %s\n' "$filenamenopath"

関連情報