ファイルディレクトリをサブディレクトリに分割する方法

ファイルディレクトリをサブディレクトリに分割する方法

次のようなファイルでいっぱいのディレクトリがあります。

3260_661901_2008-2008.dat
3260_661901_2009-2009.dat
3260_661901_2010-2010.dat
3260_661901_2011-2011.dat
3260_661901_por-1998.dat
3260_662336_1999-1999.dat
3260_662336_2000-2000.dat
3260_662336_2001-2001.dat
3260_662336_2002-2002.dat

次のように、ファイル名の6番目と7番目の文字の後にファイルをディレクトリ名に分割したいと思います。

66/3260_661901_2008-2008.dat
66/3260_661901_2009-2009.dat
66/3260_661901_2010-2010.dat
66/3260_661901_2011-2011.dat
67/3260_671901_por-1998.dat
67/3260_672336_1999-1999.dat
67/3260_672336_2000-2000.dat
88/3260_882336_2001-2001.dat
88/3260_882336_2002-2002.dat

サブディレクトリを作成し、そのサブディレクトリにファイルを移動するために使用できるクイックワンラインコマンドはありますか?

このディレクトリには33,000を超えるファイルがあることに言及したいと思います。

ベストアンサー1

使用していると仮定するとbash実行できます

for f in *.dat; do mkdir -p "${f:5:2}"; mv "$f" "${f:5:2}/"; done

または(作業するファイルが多すぎる場合for f in *.dat

while read f; do mkdir -p "${f:5:2}"; mv "$f" "${f:5:2}/"; done < ls

おすすめ記事