フォルダには何千ものテキストファイルがあり、特定の方法で名前が付けられます。
たとえば、
Image_234_Data_7778_n0.txt
Image_234_Data_7778_n1.txt
Image_234_Data_7778_n2.txt
Image_954_Data_4478_n0.txt
Image_954_Data_4478_n1.txt
Image_954_Data_4478_n2.txt
Image_104_Data_9878_n0.txt
Image_104_Data_9878_n1.txt
Image_104_Data_9878_n2.txt
など...
内容が次のようなソースファイル(ファイル名を変更して「何が何であるか」を追跡するために使用されます)を作成したいと思います。
1_1.txt:Image_234_Data_7778_n0.txt
1_2.txt:Image_234_Data_7778_n1.txt
1_3.txt:Image_234_Data_7778_n2.txt
2_1.txt:Image_954_Data_4478_n0.txt
2_2.txt:Image_954_Data_4478_n1.txt
2_3.txt:Image_954_Data_4478_n2.txt
3_1.txt:Image_104_Data_9878_n0.txt
3_2.txt:Image_104_Data_9878_n1.txt
3_3.txt:Image_104_Data_9878_n2.txt
など...
誰もが私のためにこれを行うコードを書くのに役立ちますか?
ベストアンサー1
私はあなたのファイル名が数字で終わらず、一連の数字であるランダムなテキストXXXXNNN.txt
形式であり、同じXXXにグループ化したいとします。XXXX
NNN
戦略:アルファベット順にファイルを繰り返し、XXXXセクションが変更された時期を検出します。各グループに新しい名前を生成します。 1つのマイナーな問題は、NNN部分が可変幅の場合、アルファベット順にソートされないことです。 NNN=10 は NNN=1 と NNN=2 の間に表示されます。
current=
numbers=
i=0
for x in *.txt ''; do
stem=${x%.*}
n=${stem##*[!0-9]}
stem=${stem%$n}
if [ "$stem" != "$current" ]; then
for k in $(printf '%s\n' $numbers | sort -n); do
y=${i}_${k}.txt
echo mv "$current$k.txt" "$y"
done
current=$stem
numbers=$n
i=$((i+1))
else
numbers="$numbers $n"
fi
done
ファイル名の変更、ファイルへの情報の書き込みecho mv
など、使用したいコマンドに置き換えます。mv
echo …
ファイル名を変更して以前の名前を追跡する代わりに、次のものを使用することをお勧めします。シンボリックリンク元の名前と単純化された名前を使用してファイルにアクセスできます。