特定の名前構造にファイル名を変更するには?

特定の名前構造にファイル名を変更するには?

Linuxでファイル名を変更するシェルスクリプトを書くには?

前任者:

234-2020-08-06-12-13-14-abc_up.csv

次に名前が変わりました。

234-abc_up-2020-08-06-12-13-14.csv

ベストアンサー1

このシェルスクリプトは次のタスクを実行します。

#!/bin/bash
old_filename=$1
IFS='-' read -r -a arr <<< $old_filename    # read dash-separated substrings into the array 'arr'
tmpsub=${arr[7]%.csv.gz}                    # extract 7th substring, stripping out the file extension
for i in $(seq 6 -1 1)                      # shifts right the substrings
do                                          # in the array by one 
    arr[$(($i+1))]=${arr[$i]}               # position, starting by 1
done
arr[1]=$tmpsub                              # set the substring 1 to the value of the previous 7th substring
new_filename=$(printf -- "-%s" "${arr[@]}") # join the substrings into a dash separated string
new_filename=${new_filename:1}".csv.gz"     # add the extension
mv $old_filename $new_filename              # rename the file

たとえば、名前を付けてrename_csv.shを使用して実行可能にする場合は、元のchmodファイル名のみを使用して次のように呼び出すことができます。

./rename_csv.sh 234-2020-08-06-12-13-14-abc_up.csv.gz

出力は表示されませんが、ファイル名を必要に応じて変更します。

おすすめ記事