みんな、
いいね!画像ファイルを中央の画像フォルダに移動します。これは私のスクリプトです。
img_dir='/home/filies/images/'
img_fil='/home/files/img_dump.txt'
i='0'
while read -r fline
do
fpath=$(dirname "$fline")"/"
fname=$(basename "$fline")".$i"
nfile="$img_dir$fname"
if [ ! -e "$nfile" ]; then
# mv "$fline $img_dir$nfile"
echo "NF=> $nfile"
else
((i++))
# mv "$fline $img_dir$nfile.$i"
echo "F=> $fname P=> $fpath"
fi
done < ${img_fil}
exit
正しい結果が得られるか、少なくとも満足のいく結果が得られるまで、ファイルの移動は現在コメントアウトされています。
重複があります。現在のスクリプトは、同じファイル名の重複に対してのみカウンタを増やすのではなく、重複が発生するたびにカウンタを増やします。
これを行うより良い方法はありますか?それとも、新しいイメージディレクトリから最新の増分番号を取得するサブルーチンを作成できますか?
乾杯
光学MR
答え1
スクリプトでループを使用できます。
nfile="$img_dir$fname"
while [ -e "$nfile" ]
do
((i++))
fname=$(basename "$fline")".$i"
nfile="$img_dir$fname"
done
これで未使用のファイル名ができました。
答え2
ワイルドカードを使用して配列にロードし、配列サイズを使用できます。
shopt -s nullglob
dups=("$nfile".*)
shopt -u nullglob
i=${#dups[@]}
((i++))
番号は1から始まるので、ファイル数が0であっても1になるように一度増やす必要があります。nullglob
これを設定する必要があります。それ以外の場合は、以下のように配列サイズが1になります。ファイル名globで空にできる配列を作成するには?。shopt -u nullglob
その逆は本当です。設定が解除されますnullglob
。
パターンに一致する他のファイル名に問題があります"$nfile".*
。*
数字だけでなく何でも一致するので注意してください。
全体の内容は次のとおりです。
img_dir='/home/filies/images/'
img_fil='/home/files/img_dump.txt'
#i='0'
while read -r fline
do
fpath=$(dirname "$fline")"/"
fname=$(basename "$fline")".$i"
nfile="$img_dir$fname"
if [ ! -e "$nfile" ]; then
mv "$fline $img_dir$nfile"
echo "NF=> $nfile"
else
shopt -s nullglob
dups=("$nfile".*)
shopt -u nullglob
i="${#dups[@]}"
((i++))
mv "$fline $img_dir$nfile.$i"
echo "F=> $fname.$i P=> $fpath"
fi
done < "${img_fil}"
exit
この行に注意してください
i='0'
コメントアウトしました。まず、この場合は必要ないからです。第二に、この問題を解決するために別の方法を使用する場合、リセットしないとi
各ループの後に値が増加し続けるので注意してください。while
この行に追加しましたので、.$i
必要なものではない場合は削除してください。
echo "F=> $fname.$i P=> $fpath"