ファイルのデフォルト名を抽出して追加の操作を実行するために使用するスクリプトがあります。この名前付け規則(スペースと文字を含む - 何がエラーを引き起こすのかわからない)を持つファイルでこのスクリプトを使用すると、デフォルトの名前を追加するオペランドエラーが発生します。
ファイル名: 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 .txt
returnを容易にするためfile
)。JERASH - XZ 837367432.pdf
ファイル名がいくつの単語に分割されているかに応じて、4つの引数を指定します。
代わりに、参照$file
変数が拡張されます。
filenamenoext=$(basename "$file" .pdf)
(filenamenopath
後で他の目的に必要でない限り必須ではありません。)
また見なさい:
またprintf
、変数データの印刷に使用する場合は、書式文字列を使用して変数を引用します。
printf 'Filename without path: %s\n' "$filenamenopath"