如何在bash脚本中一一重命名文件

如何在bash脚本中一一重命名文件

我有很多如下所示的文件:

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

我的用例是,当我调用我的脚本时,它将更改data1.csv to data.csv并保留文件原样,下次当我第二次调用我的脚本时,它将移动data1.csv到已处理的文件夹并更改data2.csvdata.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,您可以重复调用脚本来处理所有文件。

相关内容