次のファイル番号のリストがあります。
01_file_name.log
01_file_name.txt
02_file_name.log
02_file_name.txt
03_file_name.log
03_file_name.txt
04_file_name.log
04_file_name.txt
05_file_name.log
05_file_name.txt
03*
すべてのファイルに04*
新しいファイルを挿入したいです。したがって、ワード番号から始めて03
すべてのファイルを移動/名前変更し、前の番号を2ずつ増やす必要があります。したがって、リストは次のようになります。
01_file_name.log
01_file_name.txt
02_file_name.log
02_file_name.txt
05_file_name.log
05_file_name.txt
06_file_name.log
06_file_name.txt
07_file_name.log
07_file_name.txt
私は次のことを考えています。
bash script.sh 03 02
while03
は、$1
起動するファイル名の番号と追加する番号です02
。$2
入れ子にしてこれを達成しようとしましたが、ループがワード内の指定された番号のファイルのみを実行するようにfor-loop
カウンターを使用する組み合わせを放棄する必要がありました。((++))
ベストアンサー1
これがあなたが望むものです。一つ:BASHでしか動作しないと思います。
MAXDIGITS
オプションなので、3桁以上を使用する必要がある場合を備えています。使用しない場合は、その行を削除してください。
#!/bin/bash
BOTTOM=$1
SHIFT=$2
MAXDIGITS=0$3
for filename in $(ls -r *.{txt,log}); do
PREFIX=${filename%%_*}
NEWPREFIX=$(expr $PREFIX + $SHIFT)
if [ $PREFIX -ge $BOTTOM ]; then
NEWPREFIX=$(printf %${MAXDIGITS}d $NEWPREFIX)
mv $filename ${NEWPREFIX}_${filename#*_}
fi
done
指示:
./myscript <BOTTOM> <SHIFT> <MAXDIGITS>
### Example:
./miscript 03 02 2 #This means "Start at 03_filename.*, shift the prefixes by 2 and use 2 digits to construct the new prefixes".
同じディレクトリに同じ構文(prefix_filename。{txt、log})に従わない他のファイルがある場合は、フィルタリングする必要があります。そして、プレフィックスとファイル名を区別するために "_"を使用したので、それを変更したらコードを修正する必要があります。