シリアライゼーションが一貫性がない場合にN個のファイルをすべてコピーする方法

シリアライゼーションが一貫性がない場合にN個のファイルをすべてコピーする方法

img001.jpgからimg101693.jpgまで、101695個のファイルを含むディレクトリがあり、100個の画像ごとに異なるディレクトリに移動したいと思います。次のような投稿を見つけました。フォルダ内の4つのファイルをすべてコピーする方法ただし、これはすべてのファイルのシリアル番号で同じ桁数を想定しているため、私の範囲はimg000001.jpgで始まる必要があります。これを行う方法はありますか、またはすべての番号を持つようにファイル名を変更する必要がありますか?シリーズの登場人物は同じですか?

ベストアンサー1

dir0000最後に、これらのファイルを100のグループに分けて、次の場所にある複数の...dir1016ディレクトリに分散させたいとしますzsh

files=( img*.jpg(N.n) )
typeset -Z4 n=0
while (( $#files )); do
  mkdir -p dir$n && cp -- $files[1,100] dir$n/
  (( n++ ))
  files[1,100]=()
done

globn修飾子はファイルを数値でソートします。typeset -Z40 パディングは$n長さ 4 に拡張されます。

zshsを使用すると、同時にビット数をコピーして変更することもzmvできます。file<n>.jpgdir<n/100>

zmodload zsh/files
mkcp() { mkdir -p -- $2:h && cp -- "$@"; }
autoload -Uz zmv
zmv -Pmkcp -n 'img(<->).jpg' \
              'dir${(l[4][0])$(( $1 / 100 ))}/img${(l[6][0])1}.jpg'

-n満足すれば削除(テスト実行))。

おすすめ記事