連番の任意のファイル関連のshellでの操作に関するメモ


前書き

Linuxで連番ファイルについて取り扱ったのですが、思ったより手こずったのでメモを残しておこうと思いました。もっとわかりやすくてまどろっこしくない方法があったら知りたいです。

番号がついている任意のファイルの中で中身のないものを判別し中身の存在するファイルだけをコピーする


#!/bin/sh

echo "file名を入力してください" #これがターミナルに表示されます
read DATA #読み込んだ文字列

#何番から読むかの指定
echo "何番から読みます?"
read banme 


#何番まで読むかの指定
echo "何番まで読みます?"
read kaisuu

j=$kaisuu
k=$banme


#ここから本体
#今回XXXX_n.txt(nは任意の自然数)のようなものを読んでいるとします
for (( f=k; f<=j ;f++ ))
do
filename="$DATA"_"$f".txt

#桁数を合わせたかったのでファイル名を変更するために設定してあります。
PN=$(printf "%02d" $f)
Refilename="$DATA"_"$PN".txt

#このtest -s っていうのがファイル存在する?空じゃない?という判別に使われるそうです。
    if test -s "$filename"; then
       cp "$DATA"_"$f"_1.txt  ./cp/$Refilename
    fi
done

抜けのある連番を詰めて保存する方法

こちらを参考にしました。
https://nullpopopo.blogcube.info/2015/06/renbanrename.html
ちょっと違うのは、任意のファイル名を読み込めるようにした点です。

#!/bin/sh

#任意のFile名を読み込めます。
echo "file名を入力してください"
read DATA

for A in $(ls $DATA*.txt) ; do echo $A ; done | cat -n | awk -v data=$DATA '{print "mv",$2,data"_"$1".txt"}' | sh