ファイル名を一意に識別する方法は? [閉鎖]

ファイル名を一意に識別する方法は? [閉鎖]

現在のアドレスフローにより、メールファイルエラーと実際のファイルエラーが発生し、ジョブ内のファイル名を変更できません。

ファイル名:

s_4800_agency_addresses_1_10_2018_14_13_standard_error.csv - Mailing file
s_4800_agency_addresses_1_10_2018_14_13_1_standard_error.csv - Physical file

それが私が求めるものです。上記の2つのファイルがあります。このファイルの名前を2つの異なるファイルに配置する必要があります。 WITHOUT _1ファイルを1つのファイルに入れ、WITH _1ファイルを別のファイルに入れます。

ベストアンサー1

最初のファイル形式に一致するパターンを繰り返し、各名前を変更して2番目の形式のファイルを選択できます。

#!/bin/sh

rm -f mailfiles.txt
rm -f physicalfiles.txt

for mailfile in s_4800_agency_addresses_*_standard_error.csv; do
    prefix=${mailfile%_standard_error.csv}
    physicalfile="${prefix}_1_standard_error.csv"

    if [ -f "$physicalfile" ]; then
         printf '%s\n' "$mailfile"     >>mailfiles.txt
         printf '%s\n' "$physicalfile" >>physicalfiles.txt
    fi
done

上記のループを繰り返すたびに、上記の2つのファイル名のいずれかのように、パターンに一致する$mailfileファイル名が現在のディレクトリに存在します。s_4800_agency_addresses_*_standard_error.csv

ここで、end以外のすべてのプレフィックスを選択し、_standard_error.csvそのプレフィックスを追加して新しいファイル名を設定します_1_standard_error.csv。結果の名前が既存のファイルに対応する場合、これは$mailfile「メールファイル」と呼ばれ、これが対応する$physicalfile「物理ファイル」であることがわかり、その2つの名前がそれぞれに印刷されますmailfiles.txtphysicalfiles.txtこの結果ファイルは元の削除)。

新しく構築されたファイル名に対応するファイルが存在しない場合は、「物理ファイル」(またはその「物理ファイル」を持たない「メールファイル」)のいずれかに到達して無視されます。

これを実行してください:

$ ls -1
s_4800_agency_addresses_1_10_2018_14_13_1_standard_error.csv
s_4800_agency_addresses_1_10_2018_14_13_standard_error.csv

(ここでスクリプトを実行してください)

$ ls -1
mailfiles.txt
physicalfiles.txt
s_4800_agency_addresses_1_10_2018_14_13_1_standard_error.csv
s_4800_agency_addresses_1_10_2018_14_13_standard_error.csv

$ cat mailfiles.txt
s_4800_agency_addresses_1_10_2018_14_13_standard_error.csv

$ cat physicalfiles.txt
s_4800_agency_addresses_1_10_2018_14_13_1_standard_error.csv

(読みやすくするために空行を追加しました)

おすすめ記事