拡張子なしでファイル名を取得し、ファイル名からパターンを連結します。

拡張子なしでファイル名を取得し、ファイル名からパターンを連結します。

私のユーザーディレクトリには、次のExcelファイルがあります。

430_XFRtoDML.xlsx
431_XFRtoDML.xlsx
440_XFRtoDML.xlsx
450_XFRtoDML.xlsx
451_XFRtoDML.xlsx
465_XFRtoDML.xlsx
500_XFRtoDML.xlsx

跡:/home/user

bit_list.txt 下記のテキストファイルを生成するスクリプトを作成したいと思います。:5. ファイルからxlsx拡張子を削除してから、最初の3つの数字を削除する必要があります。例えば430_XFRtoDML:5. 430

filenames=`ls *.xlsx`
for eachfile in $filenames
do
   echo $eachfile
done

予想出力:

$ cat bit_list.txt
430_XFRtoDML:5. 430
431_XFRtoDML:5. 431
440_XFRtoDML:5. 440
450_XFRtoDML:5. 450
451_XFRtoDML:5. 451
465_XFRtoDML:5. 465
500_XFRtoDML:5. 500

答え1

  1. 解析されないlsしかし、*.xlsxforループで直接使用されます。
  2. シェルを使うパラメータの置換可能性。
  3. printf代わりに使用echo
for file in *.xlsx; do
    name="${file%.*}"
    num="${file:0:3}"
    printf '%s:5. %d\n' "$name" "$num"
done > bit_list.txt

関連情報