「bash」を使用して中括弧を拡張する

「bash」を使用して中括弧を拡張する

これに関するオンライン文書がたくさんあり、bashマニュアルページも非常に素晴らしいです。それにもかかわらず、なぜこれがうまくいかないのかわかりません。どうやら何か抜けたようですが…

file010file020...という名前の100個のファイルを含むディレクトリがありますfile1000。私はそれらの名前をnew00..99usingに変更したいと思いますmvmvg実際には両方とも同じ出力を持ちます)。次のいずれかを実行するとtarget 'new99' is not a directory(常に最後の項目)が得られます。

私は何を見逃していますか?

id@machine  ~/temp/test  ls
file010  file090   file160  file240  file320  file400  file480  file560  file640  file720  file800  file880  file960
file020  file100   file170  file250  file330  file410  file490  file570  file650  file730  file810  file890  file970
file030  file1000  file180  file260  file340  file420  file500  file580  file660  file740  file820  file900  file980
file040  file110   file190  file270  file350  file430  file510  file590  file670  file750  file830  file910  file990
file050  file120   file200  file280  file360  file440  file520  file600  file680  file760  file840  file920
file060  file130   file210  file290  file370  file450  file530  file610  file690  file770  file850  file930
file070  file140   file220  file300  file380  file460  file540  file620  file700  file780  file860  file940
file080  file150   file230  file310  file390  file470  file550  file630  file710  file790  file870  file950
 id@machine  ~/temp/test  mv {*,new{00..99}}
/usr/local/bin/mvg: target 'new99' is not a directory
 ✘ id@machine  ~/temp/test  mv {file{010..1000..10},new{00..99}}
/usr/local/bin/mvg: target 'new99' is not a directory
 ✘ id@machine  ~/temp/test  mv {file*,new{00..99}}
/usr/local/bin/mvg: target 'new99' is not a directory

ベストアンサー1

あなたは何を見逃していますか?mv仕組み。

正確に2つのファイルを提供する場合は、最初のファイル名を2番目のファイル名に変更してください。

ファイルが2つ以上の場合、最後の引数はディレクトリとして扱われ、前の引数はすべてディレクトリに移動するファイルです。

引用するマニュアルページ

ファイル名を変更するにはループが必要です。

i=0
for file in *; do
    mv -v "$file" "$(printf 'new%02d' $i)"
    ((i++))
done

アイデア:ファイルが100個を超えるとどうなりますか?ハードコーディングを避ける方法は%02d

files=(*)
num=$(( ${#files[@]} - 1 ))
size=${#num}
for idx in "${!files[@]}"; do
    mv -v "${files[idx]}" "$(printf 'new%0*d' $size $idx)"
done

おすすめ記事