Bashスクリプトでファイル名を1つずつ変更する方法

Bashスクリプトでファイル名を1つずつ変更する方法

次のファイルがたくさんあります。

data1.csv
data2.csv
.
.
data(n).csv

私のユースケースは、スクリプトを呼び出すときにファイルを変更したdata1.csv to data.csvままにしてから、次に2番目にスクリプトを呼び出すと、処理されたdata1.csvフォルダに移動して変更されることdata2.csvですdata.csv

答え1

以下は、data.csv繰り返し間の状態を維持するために要求されたファイルへのリンクとして機能します。

# check to see if an argument is given
if [ "$#" -ne 1 ]; then
        echo "Illegal number of parameters"
        exit
fi

# check if ran before if so move that to processed/ directory
if [ -h "data.csv" ]; then
        prev=`readlink data.csv`
        echo "Found previous run $prev"
        rm -f data.csv  # remove link
        mv -f $prev processed/  # move previous file to processed directory
        echo "Moved to processed/$prev"
fi

# check to see if file exists
if [ -e data$1.csv ]; then
        ln -s data$1.csv data.csv  # link data.csv to the requested file
        echo "Linked data.csv -> data$1.csv"
else
        echo "No such file data$1.csv"
fi

答え2

ファイル名に改行がない場合は、bashスクリプトで次のコマンドを使用して処理する最初のファイルを見つけることができます。

first=$(ls --sort=version *.csv | head -1)
ln -s "$first" data.csv 

ただし、ファイル名を変更する前に、既存の既存のファイルが除外されていることを確認する必要があります。

#! /bin/bash
if [ -e data.csv ] ; then
   mv $(readlink data.csv) backup_directory
   rm data.csv
fi

正しい順序で組み合わせて最後に処理を追加すると、data.csvスクリプトを繰り返し呼び出してすべてのファイルを処理できます。

関連情報