Linux Shellでファイル名の一部を変数として保存する

Linux Shellでファイル名の一部を変数として保存する

現在のファイル名:017251004_2301941_5193716.xml 必要な数:5193716

_.xml最後の数字の前後の数字を変数に保存する必要があります。誰かが同じ構文を提供できますか?

私はこれを試しましたが、num="${file:19:7}" 400万個のファイルがあり、ある程度動作していたため、一部のファイルをインポートした後にフルネームを取得できませんでした。

現在のコード:

for file in "$origin"/*.xml
do
    [ -f "$file" ] || continue    # In case there are no files to copy
        name=${file%.*}               # Strip extension
        name=${name##*/}              # Strip leading path
        save="${name}_$dt.xml"        # Backup filename with datetime suffix

        num="${file:19:7}"

echo "Copying file from Server A to Server B"
        scp -C -- "$file" "$username@$ip:$destination"
done

ベストアンサー1

はい、次のように簡単です。

#!/bin/bash
# test wrapper
file="017251004_2301941_5193716.xml"
num=$(basename "$file" ".xml" | cut -d_ -f3)
printf "file=$file,num=$num\n"
exit 0

もちろん読んでくださいman basename cut

おすすめ記事